Skip to content

tsconfig

tsconfig.jsonTypeScript 配置文件,用来告诉编译器(tsc)如何编译项目。通常放在项目根目录。

当你运行 tsc file.ts,如果项目里没有 tsconfig.json,会使用默认配置

include

指定 需要编译的文件或目录,即:将TS语法编译成JS的文件和目录。

默认值:["**/*"](除了 exclude 指定的)。

json
{
  "include": [
    "**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
  ]
}

exclude

指定 不需要编译的文件或目录

默认值:

json
["node_modules", "bower_components", "jspm_packages"]

示例:

json
{
  "exclude": [
    "dist",            // 编译结果目录
    "node_modules",    // 依赖
    "**/*.spec.ts"     // 所有测试文件
  ]
}

compilerOptions

选项默认值说明
targetES3生成 JS 的语法版本
moduleCommonJS生成的模块格式
moduleResolutionclassic(当 module=AMD/UMD/System/ES6 时) node(当 module=CommonJS 时)模块解析策略
lib根据 target 推断: - ES3["lib.d.ts", "dom.d.ts"] - ES5["es5", "dom", "scripthost"] - ES2015+ → 对应版本的标准库 + DOM加载的内置声明库,提供类型检查能力
jsxpreserve不会自动转 JSX,交给后处理工具(如 Babel、Vite)
declarationfalse生成 .d.ts,通常用于TS库开发者
sourceMapfalse生成 .map
esModuleInteropfalse不自动兼容 CommonJS 导入
skipLibCheckfalse默认检查所有 node_modules 的声明文件,项目大会很慢,所以常手动设 true
allowJsfalse允许编译 .js 文件
checkJsfalse允许检查 .js 文件,配合 JSDoc 使用时可开
resolveJsonModulefalse默认不允许 import xxx from './file.json'
选项作用示例
baseUrl相对路径解析基准"./"
paths别名映射"paths": { "@/*": ["src/*"] }
typeRoots声明包查找目录默认 node_modules/@types,可自定义
types加载哪些类型声明文件["node", "jest"](减少全局类型污染)
  • 严格类型选项
选项默认值作用
strictfalse打开全部严格检查(等价打开多项)
noImplicitAnyfalse禁用隐式 any
strictFunctionTypesfalse函数参数类型必须严格匹配
strictBindCallApplyfalse检查 bindcallapply 的参数是否正确。
noImplicitThisfalse禁用 this 推断为 any
strictNullChecksfalse是否允许null / undefined 赋值给其他类型的变量
alwaysStrictfalse生成的 JS 文件自动加 use strict

提示

如果直接设置strict=true则,严格类型选项都将设置为true

  • 输出
选项作用备注
outDir输出目录"dist"
rootDir源码根目录影响目录结构保持
declaration生成 .d.ts做库必开
emitDeclarationOnly只生成声明不生成 JS可与打包器配合
sourceMap生成 .map调试用
inlineSources / inlineSourceMap内联源码/映射产物自包含,体积↑
removeComments移除注释看需求
importsNotUsedAsValues未作为值使用的 import 的处理remove/preserve
noEmit只做类型检查不产出文件
noEmitOnError有错就不产出

示例

json
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "jsx": "preserve",
    "jsxImportSource": "vue",
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "allowSyntheticDefaultImports": true,
    "lib": ["esnext", "dom"],
    "types": ["vite/client"],
    "noEmit": true,
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    },
    "noImplicitAny": true,
    "strictFunctionTypes": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "alwaysStrict": true
  },
  "include": [
    "**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "node_modules/tdesign-vue-next/global.d.ts"
  ],
  "compileOnSave": false
}