仓库
文档
TypeScript

单仓库中的 TypeScript

您可以在单仓库中以两种方式使用 TypeScript - 作为代码风格检查器,或作为构建工具。

在本节中,我们将讨论 TypeScript 作为代码风格检查器的作用。当您阻止 TypeScript 导出文件(使用 noEmit (在新标签页中打开))时,就会发生这种情况,而只是使用它来检查源代码的类型。

共享 tsconfig.json

我们可以通过一个巧妙的解决方案在整个仓库中共享 TypeScript 配置文件。我们可以将我们的基础 tsconfig.json 文件放在一个工作区中,并从我们应用程序中的 tsconfig.json 文件中extend 它们。

让我们想象一个这样的工作区

apps
├─ docs
│  ├─ package.json
│  ├─ tsconfig.json
├─ web
│  ├─ package.json
│  ├─ tsconfig.json
packages
├─ tsconfig
│  ├─ base.json
│  ├─ nextjs.json
│  ├─ package.json
│  ├─ react-library.json

我们的 tsconfig

packages/tsconfig 中,我们有一些 json 文件,它们代表了您可能想要配置 TypeScript 的不同方式。它们看起来都像这样

{
  "$schema": "https://json.schemastore.org/tsconfig",
  "display": "Default",
  "compilerOptions": {
    "esModuleInterop": true,
    "skipLibCheck": true,
    "target": "es2022",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "moduleDetection": "force",
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "moduleResolution": "Bundler",
    "module": "ESNext",
    "noEmit": true,
    "lib": ["es2022", "dom", "dom.iterable"],
  },
  "exclude": ["node_modules"]
}

package.json 中,我们只是命名了我们的包

{
  "name": "tsconfig"
}

存储库中的其他 json 文件可以通过简单的导入访问

import baseJson from "tsconfig/base.json";
import nextjsJson from "tsconfig/nextjs.json";
import reactLibraryJson from "tsconfig/react-library.json";

这使我们能够为不同类型的项目导出不同的配置设置。

如何使用 tsconfig

每个使用我们共享的 tsconfig 的应用程序/包必须首先将其指定为依赖项

{
  "dependencies": {
    "tsconfig": "*"
  }
}

然后,它们可以在自己的 tsconfig.json 中扩展它

{
  // We extend it from here!
  "extends": "tsconfig/nextjs.json",
 
  // You can specify your own include/exclude
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
  "exclude": ["node_modules"]
}

总结

当您使用 npx create-turbo@latest 创建新的单仓库 时,此设置默认提供。您还可以查看 我们的基本示例 (在新标签页中打开),以查看工作版本。

运行任务

我们建议您按照 基础 部分中的设置进行操作。