文件选项

  1. {
  2. // 要编译的文件的数组
  3. "files": [
  4. "src/a.ts"
  5. ],
  6. // 要包含的文件夹
  7. // src代表src下的所有ts文件
  8. // src/* 代表src下的ts文件(不递归)
  9. // src/*/*代表文件夹下的文件夹的ts文件
  10. "include": [
  11. "src"
  12. ],
  13. // 排除什么文件夹内的ts文件
  14. "exclude": [
  15. "src/lib"
  16. ]
  17. // 多个条件,exclude会将前面的命中的剔除掉
  18. // 集成另外一个文件的配置文件,如果配置冲突,后者为准
  19. "extends": "./tsconfig.base",
  20. }

编译选项

  1. {
  2. "compilerOptions": {
  3. "incremental": true, //增量编译,生成了一个 tsconfig.tsbuildinfo 文件
  4. "diagnostics": true, //打印诊断信息
  5. "tsBuildInfoFile": "./buildFile", //增量编译文件的存储位置
  6. "target": "es5",
  7. "module": "commonjs",
  8. "jsx": "react",
  9. "esModuleInterop": true,
  10. "outFile": "./app.js", //将多个相互依赖的文件生成一个文件,可用在AMD模块中
  11. "lib": ["es5", "dom", "scripthost", "es2019"], //TS需要引用的库,即申明文件,es5默认引入 'es5', 'dom', 'scripthost', 如果需要引用类库es2019,可能就要引用
  12. "allowJs": true, //允许编译js文件(js jsx
  13. "checkJs": true, //允许在js文件中报错,通常和allowJs一起使用,不知道打开有啥子实用价值
  14. "outDir": "./out", // 指定输出目录,不指定的话,js还是编译成js,最后会导致报错(因为会覆盖自己)
  15. "rootDir": "./src", //编译的文件没记录 如果指定为./ out中会有 src;如果指定 ./src out中则只有src下的内容
  16. "declaration": true, //生成声明文件
  17. "declarationDir": "./d", //生成声明文件的目录
  18. "emitDeclarationOnly": true,//只生成声明文件
  19. "sourceMap": true,//生成sourceMap文件
  20. "inlineSourceMap": true,//生成inline souceMap
  21. "declarationMap": true,//为声明文件生成sourceMap
  22. "typeRoots": [], // 默认 node_modules/@types下查找
  23. "types": [], //指明需要加载的声明文件的包
  24. "noEmit": true, //不输出文件
  25. "noEmitOnError": true,//发生错误时不输出文件
  26. "noEmitHelpers": true,//不生成工具函数,节约编译后的代码提及,结合下一个属性
  27. "importHelpers": true,//通过 tslib 引入helper函数,文件必须是模块
  28. "downlevelIteration": true, //降级遍历器的实现(es3/es5)
  29. },
  30. }

工程引用

工程引用解决的是这样一个问题,假定我们项目有 src/server src/client src/common在平级的文件夹,common被另外两个文件夹引用,如果只有一个tsconfig.json,那么构建是一次性src下所有的内容都进行了构建。

另外,如果 src 还有平级目录 test,那么哪怕你一次构建项目目录,结果可能也不是你想要的:测试的内容被混入了,因此我们希望提供,想构建哪个文件夹,就构建哪个文件夹的配置能力

它主要通过如下方法来实现:

  • 在每个文件夹中提供一个自己的tsconfig.json
  • 自己的tsconfig.json可以
    • 集成自base的tsconfig.json
    • 可以指定自己的构建输出位置
    • 可以指定自己依赖的其他模块

通过在tsc构建命令中 -b 的参数,就可以有指向性地进行构建。

TypeScript语言本省就是使用使用工程引用的方式进行构建的,文件之间进行了相互引用(继承/依赖)。

例如 src/server/tsconfig.json 的文件如下

  1. {
  2. "extends": "../tsconfig-base",
  3. "compilerOptions": {
  4. "removeComments": false,
  5. "outFile": "../../built/local/server.js",
  6. "preserveConstEnums": true,
  7. "types": [
  8. "node"
  9. ]
  10. },
  11. "references": [
  12. { "path": "../compiler" },
  13. { "path": "../jsTyping" },
  14. { "path": "../services" }
  15. ],
  16. "files": [
  17. "types.ts",
  18. "utilitiesPublic.ts",
  19. "utilities.ts",
  20. "watchType.ts",
  21. "protocol.ts",
  22. "scriptInfo.ts",
  23. "typingsCache.ts",
  24. "project.ts",
  25. "editorServices.ts",
  26. "moduleSpecifierCache.ts",
  27. "packageJsonCache.ts",
  28. "session.ts",
  29. "scriptVersionCache.ts"
  30. ]
  31. }

实际运用

noImplicitAny