配置

tsconfig.json 是用于配置TypeScript编译时的配置选项:https://www.typescriptlang.org/tsconfig
image.png

  1. {
  2. "compilerOptions": {
  3. "target": "esnext",
  4. "module": "esnext",
  5. "strict": true,
  6. "jsx": "preserve",
  7. "importHelpers": true,
  8. "moduleResolution": "node",
  9. "skipLibCheck": true,
  10. "esModuleInterop": true,
  11. "allowSyntheticDefaultImports": true,
  12. "sourceMap": true,
  13. "baseUrl": ".",
  14. "types": ["webpack-env"],
  15. "paths": {
  16. "@/*": ["src/*"]
  17. },
  18. "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
  19. },
  20. "include": [
  21. "src/**/*.ts",
  22. "src/**/*.tsx",
  23. "src/**/*.vue",
  24. "tests/**/*.ts",
  25. "tests/**/*.tsx"
  26. ],
  27. "exclude": ["node_modules"]
  28. }

=====================

compilerOptions 编译选项

就是告诉ts,编译成js时有哪些规则。

一般创建通过脚手架创建的项目,会有默认的配置,除非你从零开始自己配置,否则用默认的就可以了。

如果项目使用了babel进行编译,也会读取这个文件

  1. {
  2. "compilerOptions":{
  3. // 指定编译的版本,默认会根据项目下.browserslistrc 文件(如果有的话),来看要编译成什么版本。
  4. // esnext 表示用最新的es版本
  5. // 兼容低版本浏览器,一般会填es5
  6. "target":"esnext",
  7. // 目标代码需要使用的模块化方案
  8. // es import/exportcommonjs request/module.exportsamdumd(多种模块化)等
  9. "module":"esnext",
  10. // 是否使用严格模式
  11. "strict":true,
  12. // jsx做什么处理,比如要不要转化成其他
  13. // preserve 是不处理
  14. "jsx": "preserve",
  15. // 辅助导入功能
  16. "importHelpers": true,
  17. // nodejs的方式解析模块
  18. "moduleResolution": "node",
  19. // 跳过一些库的类型检测,对库里面的类型进行检测。库里面一些没用到的功能就没必要检测,而且库与库直接可能会有冲突,没必要都去检测
  20. "skipLibCheck": true,
  21. // 是否允许es import/exportcommonjs request/module.exports,混合使用
  22. "esModuleInterop": true,
  23. "allowSyntheticDefaultImports": true,
  24. // 是否生成映射文件,映射是ts变量名和编译后的js变量名进行映射,方便测试用
  25. "sourceMap": true,
  26. // 文件路径解析时,基本的url
  27. "baseUrl": ".",
  28. // 指定具体要解析的类型,如果不写这个,默认就是用上面t
  29. "types": ["webpack-env"],
  30. // 路径解析,下面写法是,如果你写@/xxx 这样的路径,默认帮你转为src/*。
  31. // 这是一个数组,可以写多个,第一个匹配不上就匹配第二个,如此类推。
  32. // 这个一定要配,否则vite.config.ts 里面配置的别名TS还是会报错的
  33. "paths": {
  34. "@/*": ["src/*"]
  35. },
  36. // 项目可以使用哪些库的类型,如dom库,才会有对应的写代码自动提示。
  37. "lib": ["esnext", "dom", "dom.iterable", "scripthost"],
  38. "outDir":"./dist", // 编译后的js文件统一储存的文件夹
  39. "outFile":"./dist/app.js",
  40. // 编译后的所有js代码,统一合并后放在1js文件里面;但是模块化只能用amd或者system
  41. // 一般用的少,都是打包工具帮我们进行打包
  42. "allowJS":false,// 是否对js文件进行编译,默认是false
  43. "checkJS":false,// 是否检查js代码是否符合TS语法规范,默认是false
  44. "removeComments":false, // 是否移除注释,默认是false
  45. "noEmit":false, // 不生成编译后的文件,默认是false,生成
  46. "noEmitOnError":true, // 当有错误时不生成编译后的文件,默认是false,生成
  47. "alwaysStrict":false, // 编译后的js文件是否开启严格模式,默认false
  48. "noImplicitAny":true, // 变量不默认是any,默认false,是any
  49. "noImplicitThis":true, // 不允许类型不明确的this,默认false,是any
  50. "strictNullChecks":false, // 严格检查空值,检测有可能出现的空值
  51. }
  52. }

include 指定哪些要编译

哪些文件是需要编译解析的

  1. "include":[
  2. "./src/**/*.ts",
  3. "./src/**/*.tsx",
  4. "./src/**/*.vue"
  5. ]

image.png

exclude 指定哪些不编译

比如你通过import 引用 axios 这个库,默认是给你解析的,axios默认就在node_modules文件夹内,但没必要完全解析。
因此可以把node_modules排除不解析,只解析引用的部分

  1. "exclude": ["node_modules"]

image.png