Skip to content

TypeScript 与 Bun 集成指南

Bun 对 TypeScript 有着出色的原生支持,让你可以无需任何编译步骤就能直接运行 TypeScript 代码。本指南将帮助你正确设置 TypeScript 环境,以便与 Bun 无缝协作。

安装 TypeScript 类型定义

要在编辑器中获得 Bun 内置 API 的类型提示和补全功能,首先需要安装 @types/bun 类型定义包:

sh
$ bun add -d @types/bun # 作为开发依赖安装

> `-d` 参数代表将包安装为开发依赖(devDependencies),这些依赖不会包含在生产环境中。

安装完成后,你就可以在 TypeScript 文件中直接引用 Bun 全局对象,而不会看到任何类型错误:

ts
// 现在编辑器能正确识别 Bun 全局对象
console.log(Bun.version); // 输出当前安装的 Bun 版本

TypeScript 配置推荐

Bun 支持许多现代 JavaScript 特性,如顶级 await、JSX 语法以及带扩展名的 .ts 导入,而默认情况下 TypeScript 编译器可能不允许这些特性。下面是一份针对 Bun 项目的推荐 TypeScript 配置,可以让你无缝使用这些特性而不会收到 TypeScript 编译器的警告。

jsonc
{
  "compilerOptions": {
    // 环境设置与最新特性支持
    "lib": ["ESNext"],
    "target": "ESNext",
    "module": "Preserve",
    "moduleDetection": "force",
    "jsx": "react-jsx",
    "allowJs": true,

    // Bundler 模式设置
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "verbatimModuleSyntax": true,
    "noEmit": true,

    // 最佳实践
    "strict": true,
    "skipLibCheck": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,

    // 更严格的可选标志(默认禁用)
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noPropertyAccessFromIndexSignature": false
  }
}

配置参数说明

配置项功能描述
lib指定 TypeScript 可以使用的库文件,"ESNext" 表示使用最新的 ECMAScript 特性
target指定编译后的 JavaScript 代码版本
module代码模块化系统,"Preserve" 会保留导入语句原样
jsx指定 JSX 代码的转换方式,"react-jsx" 用于 React 17+
moduleResolution设置为 "bundler" 可与现代打包工具更好地协作
allowImportingTsExtensions允许导入带 .ts 扩展名的文件
noEmit不生成输出文件(Bun 会直接执行 TypeScript)
strict启用所有严格类型检查选项

自动生成配置

如果你不想手动配置,可以使用 bun init 命令在新目录中自动生成上述 tsconfig.json 文件(更严格的标志默认是禁用的):

sh
$ bun init

INFO

关于 Bun 的 TypeScript 执行 Bun 可以直接执行 TypeScript 文件,无需额外的编译步骤。Bun 内部使用 swc(Rust 编写的超快 JavaScript 编译器)来即时转译 TypeScript 代码。

示例:创建一个简单的 TypeScript 应用

以下是一个简单的 TypeScript 应用程序示例,展示了 Bun 的类型支持:

ts
// 文件: index.ts

// 使用 TypeScript 接口定义请求处理器
interface RequestHandler {
  (req: Request): Response | Promise<Response>;
}

// 创建一个强类型的请求处理器
const handler: RequestHandler = (req) => {
  // 访问 Bun 特有的 API
  const serverURL = new URL(req.url);
  console.log(`请求路径: ${serverURL.pathname}`);

  // 返回一个响应
  return new Response("Hello from TypeScript + Bun!", {
    headers: { "Content-Type": "text/plain" },
  });
};

// 启动 Bun 服务器
Bun.serve({
  port: 3000,
  fetch: handler,
});

console.log(`服务器运行在 http://localhost:3000`);

要运行此应用程序,只需执行:

sh
$ bun run index.ts

使用 Bun 运行 TypeScript 文件时,不需要额外的构建或转译步骤。Bun 会自动处理 TypeScript 代码的转译。

总结

通过正确配置 TypeScript 与 Bun 的集成,你可以享受到:

  • 编辑器中的自动补全和类型检查
  • 直接执行 TypeScript 代码的便利性
  • 现代 JavaScript 特性的支持
  • 无需额外构建步骤的开发体验

这种无缝集成使得在 Bun 中使用 TypeScript 变得简单高效,特别适合希望在项目中引入类型安全的开发者。