本文已参与「新人创作礼」活动,一起开启掘金创作之路。
配置文件
生成配置文件
tsc --init
target
:"es2016" //代表编译的目标版本是es6module:commonjs
//模块化规范是commonjs规范strict
:true //严格模式开启esModuleInterop
:true // 允许export=导出,由import from 导入skipLibCheck
:true // 跳过所有.d.ts的类型检查文件。forceConsistentCasingInFileNames
// 确保导入文件名是正确的。
{
"compilerOptions": {
/* 访问 https://aka.ms/tsconfig.json 以阅读有关此文件的更多信息 */
/* 基本选项 */
"incremental": true, /* 启用增量编译 */
"target": "ESNEXT", /* 指定 ECMAScript 目标版本:'ES3'、'ES5'(默认)、'ES2015'、'ES2016'、'ES2017'、'ES2018'、'ES2019'、'ES2020' 或 'ESNEXT'。 */
"module": "commonjs", /* 指定模块代码生成:“none”、“commonjs”、“amd”、“system”、“umd”、“es2015”、“es2020”或“ESNext”。 */
"lib": [], /* 指定要包含在编译中的库文件。 */
"allowJs": true, /* 允许编译 javascript 文件。 */
"checkJs": true, /* 报告 .js 文件中的错误。 */
"jsx": "preserve", /* 指定 JSX 代码生成:'preserve'、'react-native' 或 'react'。 */
"declaration": true, /* 生成相应的“.d.ts”文件。 */
"declarationMap": true, /* 为每个对应的“.d.ts”文件生成一个源映射。 */
"sourceMap": true, /* 生成相应的“.map”文件。 */
"outFile": "./", /* 连接输出到单个文件。 */
"outDir": "./", /* 将输出结构重定向到目录。 */
"rootDir": "./", /* 指定输入文件的根目录。用于通过 --outDir 控制输出目录结构。 */
"composite": true, /* 启用项目编译 */
"tsBuildInfoFile": "./", /* 指定文件存放增量编译信息 */
"removeComments": true, /* 不要向输出发出注释(删除除代码注释)。 */
"noEmit": true, /* 不发出输出(不生成编译后的文件)。 */
"noEmitOnError": true, /* 在输出js代码时,如果有错将不编译文件。 */
"importHelpers": true, /* 从 'tslib' 导入发射助手。 */
"downlevelIteration": true, /* 以“ES5”或“ES3”为目标时,为“for-of”、展开和解构中的迭代提供全面支持。 */
"isolatedModules": true, /* 将每个文件转换为一个单独的模块(类似于 'ts.transpileModule')。 */
/* 严格的类型检查选项 */
"strict": true, /* 启用所有严格的类型检查选项。 在开发中,建议将stricet这类选项都开启。 */
"strictNullChecks": true, /* 启用严格的空(undefined、null)检查,可以防止“未定义不是对象”。 建议开启*/
"strictFunctionTypes": true, /* 启用函数类型的严格检查。 */
"strictBindCallApply": true, /* 在函数上启用严格的“绑定”、“调用”、应用”方法。 */
"strictPropertyInitialization": true, /* 启用对类中属性初始化的严格检查。 */
"noImplicitThis": true, /* 使用隐含的“any”类型在“this”表达式上引发错误。 */
"noImplicitAny": true, /* 使用隐含的“any”类型在表达式和声明上引发错误(主要用于控制变量、参数是否必须知道它们的类型【类型检查】),如果是将JavaScript迁移到TypeScript时,可以关闭此项,但不建议这样做。 */
"alwaysStrict": true, /* 以严格模式解析并为每个源文件发出“使用严格”。 */
/* 额外检查 */
"noUnusedLocals": true, /* 报告未使用的本地人的错误。 */
"noUnusedParameters": true, /* 报告未使用参数的错误。 */
"noImplicitReturns": true, /* 不是函数中的所有代码路径都返回值时报告错误。 */
"noFallthroughCasesInSwitch": true, /* 在 switch 语句中报告失败情况的错误。 */
/* 模块分辨率选项 */
"moduleResolution": "node", /* 指定模块解析策略:'node' (Node.js) 或 'classic' (TypeScript pre-1.6)。 */
"baseUrl": "./", /* 解析非绝对模块名称的基目录。 */
"paths": {}, /* 一系列将导入重新映射到相对于“baseUrl”的查找位置的条目。 */
"rootDirs": [], /* 根文件夹列表,其组合内容代表运行时项目的结构。 */
"typeRoots": [], /* 包含类型定义的文件夹列表。 */
"types": [], /* 类型声明文件要包含在编译中。 */
"allowSyntheticDefaultImports": true, /* 允许从没有默认导出的模块中默认导入。 这不会影响代码发出,只是类型检查。 */
"esModuleInterop": true, /* 通过为所有导入创建命名空间对象,在 CommonJS 和 ES 模块之间启用发射互操作性。 暗示“allowSyntheticDefaultImports”。 */
"preserveSymlinks": true, /* 不解析符号链接的真实路径。 */
"allowUmdGlobalAccess": true, /* 允许从模块访问 UMD 全局变量。 */
/* 源映射选项 */
"sourceRoot": "", /* 指定调试器应该定位 TypeScript 文件而不是源位置的位置。 */
"mapRoot": "", /* 指定调试器应该定位映射文件而不是生成位置的位置。 */
"inlineSourceMap": true, /* 发出带有源映射的单个文件而不是单独的文件。 */
"inlineSources": true, /* 在单个文件中与源映射一起发出源; 需要设置“--inlineSourceMap”或“--sourceMap”。 */
/* 实验选项 */
"experimentalDecorators": true, /* 启用对 ES7 装饰器的实验性支持。 */
"emitDecoratorMetadata": true, /* 为装饰器的发射类型元数据启用实验性支持。 */
/* 高级选项 */
"skipLibCheck": true, /* 跳过声明文件的类型检查。 */
"forceConsistentCasingInFileNames": true /* 禁止对同一文件的大小写不一致的引用。 */
}
}
当然在项目中是不会有这么多的配置,常用的就几个下面是从一个vite项目中的tsconfig.json中截取的
{
//继承tsconfig.web.json配置
"extends": "@vue/tsconfig/tsconfig.web.json",
//编译src目录下所有文件
"include": ["env.d.ts", "src/**/*"],
// "exclude": ["src/LayOut/index.vue"],
//编译器相关的选项
"compilerOptions": {
"baseUrl": ".",
"types": ["node", "element-plus/global"],
"paths": {
"@/*": ["./src/*"]
},
// target 支持的值有:es3、es5、es6(也叫 es2015)、es2016 一直到 es2022
"target": "ES2016", // 目标语言的版本
//TypeScript 默认自带通用的 JS 内置 API 的类型声明,比如 Math、RegExp 等。
//但 JS 运行的环境各种各样,会有一些特有的全局对象,比如浏览器下的 document,新的 ES 版本引入的新的 API。
//我们可以用 lib 这个属性来设置需要引入的全局类型声明
"lib": ["dom", "es5", "es2015.promise", "ES2016", "es2017"]
},
//reference:引用。项目中如果有多个相互独立的模块,可以使用这个属性来做分离。
//这样一个模块改变后,就只重新编译这个模块,其他模块不重新编译。
//编译时要改用 tsc --build。这在非常大的项目中应该能有不小收益。
"references": [
{
"path": "./tsconfig.config.json"
}
]
}
include 指定编译文件默认是编译当前目录下所有的ts文件
exclude 指定排除的文件
target 指定编译js 的版本例如es5 es6 es2020
allowJS 是否允许编译js文件
removeComments 是否在编译过程中删除文件中的注释
rootDir 编译文件的目录
outDir 输出的目录
strict 严格模式
module 模块化规范
更多详情配置查看TypeScript官网