compilerOptions配置项详解
1、 "target":
- 说明: 指定编译输出的 ECMAScript 版本。
- 可选值: ES3 (默认)、 ES5、ES6 / ES2015、 ES2016 / ES2017 / ES2018 / ES2019 / ES2020 / ES2021 / ESNext
2、 "module":
- 说明: 指定编译输出的模块系统类型。常用于指定如何组织和引入模块。
- 可选值: CommonJS (Node.js 默认)、 AMD 、ES6 / ESNext (ECMAScript 模块)、System、UMD、None(不生成模块)
3、 "lib":
- 作用解释:如果你指定了 "lib": ["es6"],那么 TypeScript 会包含 ECMAScript 6(ES6)的标准库,像是 Promise、Map 等新特性会被正确识别和支持。如果没有显式设置 lib,TypeScript 会根据目标版本(target)自动选择一些默认的库文件。
- 说明: 指定编译时包含的库文件,影响内置对象的可用性。
- 可选值: ES6, ES2020, DOM, WebWorker, Node 你可以通过数组指定多个库。
4、 "allowJs":
- 说明: 允许编译
.js
文件,TypeScript 会将其视为 JavaScript 文件进行编译。
对js文件的处理
- 复制:
.js
文件会被复制到输出目录。 - 转换:如果需要,TypeScript 会根据配置对
.js
文件进行 语法转换,如目标版本的转换(target
)或模块系统的转换(module
)。但是 不会进行类型检查。 - 不处理类型:
allowJs
只会让 TypeScript 处理.js
文件的语法和输出,但不会对其中的类型进行检查。
5、checkJs
- 说明: 在编译
.js
文件时进行类型检查(即使文件是 JavaScript 代码)。
为什么 checkJs
不是多余的?
- 增强错误检测:它提供了对 JavaScript 代码的类型检查,有助于提前发现潜在的错误。
- 无缝过渡到 TypeScript:对于逐步迁移到 TypeScript 的项目,启用
checkJs
可以帮助检查现有的 JavaScript 代码,找出类型问题,而无需立即将代码完全迁移到 TypeScript。 - 提升代码质量:即使没有明确的类型定义,
checkJs
通过推断提供了类型检查,可以让 JavaScript 代码更健壮。
6、esModuleInterop
- 说明: 允许默认导入非 ES6 模块(如 CommonJS),使得
import x from "module"
语法可以正常工作。
esModuleInterop
的作用
- 当你启用
esModuleInterop
时,TypeScript 会对 CommonJS 模块和其他非 ES6 模块做一些 转换,使得你可以使用类似import x from "module"
的语法来导入这些模块。 - 换句话说,启用
esModuleInterop
后,TypeScript 会在 CommonJS 模块导入时模拟默认导出。这使得你可以像使用 ES6 模块一样,直接使用import x from "module"
语法来导入 CommonJS 模块。
示例:
假设有一个 CommonJS 模块:
// commonjs-module.js
module.exports = function() { console.log("Hello from CommonJS") }
在 TypeScript 中,如果启用了 esModuleInterop
,你可以这样导入并使用它:
import x from "./commonjs-module"; // 现在可以像使用 ES6 模块一样导入
x(); // 输出: "Hello from CommonJS"
7、forceConsistentCasingInFileNames
- 说明: 强制文件名的大小写一致性。确保大小写不同的文件名视为不同文件。
8、moduleResolution
- 说明: 指定模块解析策略。控制 TypeScript 如何解析模块路径。
classic
:适用于早期的模块解析,比较基础,不会自动支持像 Node.js 的node_modules
查找机制。node
:适用于现代 JavaScript 和 Node.js 的模块解析,支持更复杂的模块查找规则,包括node_modules
目录等。适合大多数现代项目。
9、noImplicitAny
- 说明: 启用后,所有隐式
any
类型会抛出错误,即不能让编译器自动推断为any
。
10、strict
- 说明: 启用所有严格的类型检查选项,包括:
noImplicitAny
:禁止隐式的any
类型,要求显式声明类型。strictNullChecks
:严格区分null
和undefined
与其他类型的赋值关系。strictFunctionTypes
:使函数类型参数匹配更严格,避免意外的类型不兼容。noImplicitThis
:要求明确声明函数中的this
类型,避免this
类型不明确的问题。alwaysStrict
:强制生成的 JavaScript 启用严格模式,避免一些不安全的行为。
-
noImplicitThis
-
作用:此选项要求在函数中使用
this
时,必须显式地声明其类型。如果函数没有明确指定this
的类型,TypeScript 会报错。 -
默认行为:如果禁用该选项,
this
的类型默认为any
,这可能导致一些潜在的类型错误。 -
启用后效果:
- 如果函数内部使用了
this
,你必须在函数声明时明确指定this
的类型,否则 TypeScript 会报错。
示例:
- 如果函数内部使用了
function myFunction() {
console.log(this.value); // 错误:隐式的 'this' 类型为 'any'
}
解决方法:
function myFunction(this: { value: string }) {
console.log(this.value); // 正确
}
11、noEmit
- 说明: 编译时不生成任何输出文件,仅进行类型检查。
12、outDir
- 说明: 指定输出文件的目录。
13、rootDir
- 说明: 指定输入文件的根目录。TypeScript 会将此目录下的所有文件进行编译。
14、removeComments
- 说明: 是否从生成的 JavaScript 文件中移除注释。
15、sourceMap
- 说明: 是否生成
.map
文件,供调试使用,将编译后的代码与原始 TypeScript 代码映射起来。
16、skipLibCheck
- 说明: 跳过库文件的类型检查,通常用于加速编译过程。
17、strictNullChecks
- 说明: 启用严格的
null
和undefined
类型检查,不会将null
和undefined
自动视为任何类型。
18、resolveJsonModule
- 说明: 允许导入
.json
文件作为模块。
19、incremental
- 说明: 启用增量编译,保留编译的中间状态,以加速后续编译。
20、noFallthroughCasesInSwitch
- 说明: 禁止
switch
语句中 case 穿透(fall-through)。如果没有break
,会报错。
21、isolatedModules
- 说明: 启用模块隔离,常用于与 Babel 等工具一起使用,确保每个文件都是独立的模块。
原文地址:https://blog.csdn.net/weixin_47808575/article/details/145160002
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!