如果一个目录下存在一个tsconfig.json文件,那么它意味着这个目录是TypeScript项目的根目录。 tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项。
tsconfig.json文件可以是个空文件,那么所有默认的文件都会以默认配置选项编译。
在命令行上指定的编译选项会覆盖在tsconfig.json文件里的相应选项
一个项目可以通过以下方式之一来编译:
不带任何输入文件的情况下调用tsc,编译器会从当前目录开始去查找tsconfig.json文件,逐级向上搜索父目录。
不带任何输入文件的情况下调用tsc,且使用命令行参数–project(或-p)指定一个包含tsconfig.json文件的目录。
当命令行上指定了输入文件时,tsconfig.json文件会被忽略。
2
"extends"
:
""
,
3
"compileOnSave"
:
true
,
4
"compilerOptions"
: {},
5
"files"
: [],
6
"include"
: [],
7
"exclude"
: [],
8
"references"
: []
compileOnSave
让IDE在保存文件的时候根据tsconfig.json重新生成文件要想支持这个特性需要Visual Studio 2015, TypeScript1.8.4以上并且安装atom-typescript插件。
compilerOptions
编译选项,详见compilerOptions
files
指定一个包含相对或绝对文件路径的列表
include
指定一个文件glob匹配模式列表
exclude
指定一个文件glob匹配模式列表
references
一个对象的数组,指明要引用的工程。每个引用的path属性都可以指向到包含tsconfig.json文件的目录,或者直接指向到配置文件本身(名字是任意的)
compilerOptions 编译选项
2
"extends"
:
""
,
3
"compileOnSave"
:
false
,
4
"compilerOptions"
: {
//编译选项
5
"allowJS"
:
false
,
// 允许编译器编译JS,JSX文件
6
"checkJs"
:
false
,
// 在 .js文件中报告错误。与allowJs配合使用。
7
"allowSyntheticDefaultImports"
:
false
,
//允许从没有设置默认导出的模块中默认导入。这并不影响代码的输出,仅为了类型检查。默认值:module === "system" 或设置了 --esModuleInterop 且 module 不为 es2015 / esnext
8
"allowUnreachableCode"
:
false
,
//不报告执行不到的代码错误。
9
"allowUnusedLabels"
:
false
,
//不报告未使用的标签错误
10
"alwaysStrict"
:
false
,
// 在代码中注入'use strict',以严格模式解析并为每个源文件生成 "use strict"语句
11
"charset"
:
"utf8"
,
//输入文件的字符集
12
"declaration"
:
false
,
// 生成声明文件.d.ts,开启后会自动生成声明文件
13
"declarationDir"
:
""
,
// 指定生成声明文件存放目录
14
"diagnostics"
:
false
,
// 显示诊断信息
15
"extendedDiagnostics"
:
false
,
//显示详细的诊段信息
16
"experimentalDecorators"
:
false
,
//启用实验性的ES装饰器
17
"disableSizeLimit"
:
false
,
//禁用JavaScript工程体积大小的限制
18
"emitBOM"
:
false
,
//在输出文件的开头加入BOM头(UTF-8 Byte Order Mark)。
19
"forceConsistentCasingInFileNames"
:
false
,
//禁止对同一个文件的不一致的引用
20
"incremental"
:
true
,
// TS编译器在第一次编译之后会生成一个存储编译信息的文件,第二次编译会在第一次的基础上进行增量编译,可以提高编译的速度
21
"isolatedModules"
:
false
,
//将每个文件作为单独的模块(与“ts.transpileModule”类似)。
22
"listEmittedFiles"
:
false
,
//打印出编译后生成文件的名字
23
"listFiles"
:
false
,
// 编译过程中打印文件名
24
"tsBuildInfoFile"
:
"./buildFile"
,
// 增量编译文件的存储位置
25
"target"
:
"ES5"
,
// 指定ECMAScript目标版本 "ES3"(默认), "ES5", "ES6"/ "ES2015", "ES2016", "ES2017"或 "ESNext"
26
"module"
:
"CommonJS"
,
// 设置程序的模块系统, "None", "CommonJS", "AMD", "System", "UMD", "ES6"或 "ES2015", "ESNext", "ES2020",只有 "AMD"和 "System"能和 --outFile一起使用,"ES6"和 "ES2015"可使用在目标输出为 "ES5"或更低的情况下。默认值:target === "ES6" ? "ES6" : "commonjs"
27
"moduleResolution"
:
"node"
,
// 模块解析策略,ts默认用node的解析策略,即相对的方式导入
28
"jsx"
:
"Preserve"
,
//在 `.tsx`文件里支持JSX: `"React"`或 `"Preserve"`
29
"jsxFactory"
:
"React.createElement"
,
//指定生成目标为react JSX时,使用的JSX工厂函数,比如 `React.createElement`或 `h`
30
"newLine"
:
"crlf"
,
//当生成文件时指定行结束符: "crlf"(windows)或 "lf"(unix)。
31
"noEmit"
:
false
,
// 不输出文件,即编译后不会生成任何js文件
32
"noEmitOnError"
:
false
,
// 发送错误时不输出任何文件
33
"noErrorTruncation"
:
false
,
//不截短错误消息
34
"noFallthroughCasesInSwitch"
:
false
,
// 防止switch语句贯穿(即如果没有break语句后面不会执行)
35
"noImplicitAny"
:
false
,
// 不允许隐式的any类型,在表达式和声明上有隐含的 any类型时报错
36
"noImplicitReturns"
:
false
,
//每个分支都会有返回值,不是函数的所有返回路径都有返回值时报错
37
"noImplicitThis"
:
false
,
// 不允许this有隐式的any类型
38
"noImplicitUseStrict"
:
false
,
//模块输出中不包含 "use strict"指令
39
"noLib"
:
false
,
//不包含默认的库文件( lib.d.ts)
40
"noResolve"
:
false
,
//不把 /// <reference``>或模块导入的文件加到编译文件列表。
41
"noEmitHelpers"
:
true
,
// 不生成helper函数,减小体积,需要额外安装,常配合importHelpers一起使用
42
"noStrictGenericChecks"
:
false
,
//禁用在函数类型里对泛型签名进行严格检查
43
"noUnusedLocals"
:
false
,
// 若有未使用的局部变量则抛错
44
"noUnusedParameters"
:
false
,
// 检若有未使用的函数参数则抛错
45
"lib"
: [
//TS需要引用的库,即声明文件,es5 默认引用dom、es5、scripthost,如需要使用es的高级版本特性,通常都需要配置,如es8的数组新特性需要引入"ES2019.Array",我用的是"esnext", "dom"
46
"DOM"
,
47
"ES2015"
,
48
"ScriptHost"
,
49
"ES2019.Array"
50
],
51
"outDir"
:
"./dist"
,
// 指定输出目录
52
"outFile"
:
"./app.js"
,
// 将多个相互依赖的文件生成一个文件,可以用在AMD模块中,即开启时应设置"module": "AMD",
53
"preserveSymlinks"
:
false
,
//不把符号链接解析为其真实路径;将符号链接文件视为真正的文件
54
"preserveWatchOutput"
:
false
,
//保留watch模式下过时的控制台输出
55
"removeComments"
:
true
,
// 删除所有注释,除了以 /!*开头的版权信息
56
"rootDir"
:
"./"
,
// 指定输出文件目录(用于输出),用于控制输出目录结构
57
"resolveJsonModule"
:
true
,
//允许导入扩展名为“.json”的模块
58
"emitDeclarationOnly"
:
true
,
// 只生成声明文件,而不会生成js文件
59
"sourceMap"
:
true
,
// 生成目标文件的sourceMap文件
60
"inlineSourceMap"
:
false
,
// 生成目标文件的inline SourceMap,inline SourceMap会包含在生成的js文件中
61
"inlineSources"
:
false
,
// 将代码与sourcemaps生成到一个文件中,要求同时设置了 --inlineSourceMap或 --sourceMap属性
62
"declarationMap"
:
true
,
// 为声明文件生成sourceMap
63
"types"
: [],
// 要包含的类型声明文件名列表
64
"typeRoots"
: [],
// 声明文件目录,默认时node_modules/@types
65
"importHelpers"
:
true
,
// 通过tslib引入helper函数,文件必须是模块(比如 __extends, __rest等)
66
"downlevelIteration"
:
true
,
// 降级遍历器实现,如果目标源是es3/5,那么遍历器会有降级的实现
67
"strict"
:
true
,
// 启用所有严格类型检查选项。启用 --strict相当于启用 --noImplicitAny, --noImplicitThis, --alwaysStrict, --strictNullChecks和 --strictFunctionTypes和--strictPropertyInitialization
68
"skipLibCheck"
:
false
,
//忽略所有的声明文件( *.d.ts)的类型检查
69
"strictNullChecks"
:
true
,
// 不允许把null、undefined赋值给其他类型的变量.在严格的 null检查模式下, null和 undefined值不包含在任何类型里,只允许用它们自己和 any来赋值(有个例外, undefined可以赋值到 void)
70
"strictFunctionTypes"
:
true
,
// 不允许函数参数双向协变
71
"strictPropertyInitialization"
:
true
,
// 确保类的非undefined属性已经在构造函数里初始化。若要令此选项生效,需要同时启用--strictNullChecks
72
"suppressExcessPropertyErrors"
:
false
,
//阻止对对象字面量的额外属性检查
73
"suppressImplicitAnyIndexErrors"
:
false
,
//阻止 --noImplicitAny对缺少索引签名的索引对象报错
74
"strictBindCallApply"
:
true
,
// 严格的bind/call/apply检查
75
"useDefineForClassFields"
:
true
,
//详见 https://jkchao.github.io/typescript-book-chinese/new/typescript-3.7.html#usedefineforclassfields-%E6%A0%87%E8%AE%B0%E4%B8%8E-declare-%E5%B1%9E%E6%80%A7%E4%BF%AE%E9%A5%B0%E7%AC%A6
76
"esModuleInterop"
:
true
,
// 允许module.exports=xxx 导出,由import from 导入.因为很多老的js库使用了commonjs的导出方式,并且没有导出default属性
77
"allowUmdGlobalAccess"
:
true
,
// 允许在模块中全局变量的方式访问umd模块
78
"baseUrl"
:
"./"
,
// 解析非相对模块的基地址,默认是当前目录
79
"paths"
: {
// 模块名到基于 baseUrl的路径映射的列表
80
// 如使用jq时不想使用默认版本,而需要手动指定版本,可进行如下配置
81
"jquery"
: [
82
"node_modules/jquery/dist/jquery.min.js"
84
},
85
"rootDirs"
: [
86
"src"
,
87
"out"
88
],
// 将多个目录放在一个虚拟目录下,用于运行时,即编译后引入文件的位置可能发生变化,这也设置可以虚拟src和out在同一个目录下,不用再去改变路径也不会报错
89
},
90
"files"
: [],
91
"include"
: [],
92
"exclude"
: [],
93
"references"
: []
files include exclude 文件包含
“files"指定一个包含相对或绝对文件路径的列表。 “include"和"exclude"属性指定一个文件glob匹配模式列表。 支持的glob通配符有:
匹配0或多个字符(不包括目录分隔符)
? 匹配一个任意字符(不包括目录分隔符)
**/ 递归匹配任意子目录
不指定"files"和"include”
编译器默认包含当前目录和子目录下所有的TypeScript文件(.ts, .d.ts 和 .tsx),排除在"exclude"里指定的文件。
指定"files"或"include”
编译器会将它们结合一并包含进来使用"include"引入的文件可以使用"exclude"属性过滤然而,通过 “files"属性明确指定的文件却总是会被包含在内,不管"exclude"如何设置,任何被"files"或"include"指定的文件所引用的文件也会被包含进来。 A.ts引用了B.ts,因此B.ts不能被排除,除非引用它的A.ts在"exclude"列表中。
“exclude”
默认情况下会排除node_modules,bower_components,jspm_packages和
目录在compilerOptions中指定的"outDir” 永远会被编译器排除,除非你明确地使用"files"将其包含进来(这时就算用exclude指定也没用)
编译器不会去引入那些可能做为输出的文件;比如,假设我们包含了index.ts,那么index.d.ts和index.js会被排除在外。 通常来讲,不推荐只有扩展名的不同来区分同目录下的文件
3
"compilerOptions"
: {
4
"allowJs"
:
true
,
//允许编译器编译JS,JSX文件
5
"target"
:
"ES2015"
,
//指定ECMAScript目标版本
6
"useDefineForClassFields"
:
true
,
7
"module"
:
"ESNext"
,
//设置程序的模块系统
8
"moduleResolution"
:
"Node"
,
//模块解析策略。默认使用node的模块解析策略
9
"strict"
:
true
,
//启用所有严格类型检查选项
10
"jsx"
:
"preserve"
,
//preserve模式,在preserve模式下生成代码中会保留JSX以供后续的转换操作使用
11
"sourceMap"
:
true
,
//生成目标文件的sourceMap文件
12
"resolveJsonModule"
:
true
,
//允许导入扩展名为“.json”的模块
13
"esModuleInterop"
:
false
,
//允许module.exports=xxx 导出,由import from 导入.因为很多老的js库使用了commonjs的导出方式,并且没有导出default属性
14
"lib"
: [
//TS需要引用的库
15
"ESNext"
,
16
"DOM"
17
],
18
"forceConsistentCasingInFileNames"
:
true
,
//禁止对同一个文件的不一致的引用
19
"allowSyntheticDefaultImports"
:
true
,
//允许从没有设置默认导出的模块中默认导入
20
"skipLibCheck"
:
true
,
//忽略所有的声明文件( *.d.ts)的类型检查
21
"baseUrl"
:
"./"
,
// 解析非相对模块的基地址,默认是当前目录
22
"paths"
: {
//模块名到基于 baseUrl的路径映射的列表
23
"/@/*"
: [
24
"src/*"
25
],
26
},
27
"types"
: [
//要包含的类型声明文件名列表
28
"vite/client"
,
29
"element-plus/global"
,
31
},
32
"include"
: [
//包含的文件
33
"src/**/*.ts"
,
34
"src/**/*.d.ts"
,
35
"src/**/*.tsx"
,
36
"src/**/*.js"
,
37
"src/**/*.jsx"
,
38
"src/**/*.vue"
,
发布日期:2023-04-11 22:26 字数:672 用时
4分钟
alpine(1)
centos(3)
cli(1)
debug(1)
docker(8)
docker-compose(1)
etcd(1)
etcdctl(1)
freemesh(1)
git(6)
go(3)
go-zeus(1)
goland(2)
golang(7)
grafana(2)
grpc(5)
grpcurl(1)
homebrew(1)
homedir(1)
http(2)
hugo(1)
java(2)
javascript(2)
job(1)
js(1)
json(1)
k8s(9)
kubebuilder(1)
kubectl(4)
linux(1)
localecompare(1)
lombok(1)
metrics(2)
mock(1)
mysql(1)
npm(1)
nsenter(1)
pnpm(1)
pprof(1)
prettier(1)
prometheus(1)
protoc(1)
qiankun(1)
request(1)
scss(1)
servicemesh(1)
spring(1)
ssh(2)
tcpdump(1)
typescript(1)
vite(2)
vscode(2)
vue(8)
vue-admin(2)
vue3(1)
webssh(1)
xtermjs(1)
xxl-job(1)
yarn(1)
云原生(4)
介绍(1)
博客(1)
压缩(1)
后台管理系统(1)
如水网(1)
容器(2)
开发联调神器(1)
微前端(1)
微服务(2)
微服务框架(1)
文集(2)
服务发现(1)
服务网格(1)
监控告警(1)
端口映射(1)
证书(1)
负载均衡(1)