tsconfig.json
概观
tsconfig.json目录中文件的存在表示目录是TypeScript项目的根目录。该tsconfig.json文件指定编译项目所需的根文件和编译器选项。一个项目按以下方式编译:
使用tsconfig.json
- 通过在没有输入文件的情况下调用tsc,在这种情况下,编译器搜索
tsconfig.json从当前目录开始并继续到父目录链的文件。
- 通过调用没有输入文件和
--project(或者只是-p)命令行选项的tsc 来指定包含tsconfig.json文件的目录的路径或.json包含配置的有效文件的路径。
当在命令行上指定输入文件时,tsconfig.json文件将被忽略。
示例
示例tsconfig.json文件:
- 使用
"files"属性{“compilerOptions”:{“module”:“commonjs”,“noImplicitAny”:true,“removeComments”:true,“preserveConstEnums”:true,“sourceMap”:true},“files”:“core.ts “,”sys.ts“,”types.ts“,”scanner.ts“,”parser.ts“,”utilities.ts“,”binder.ts“,”checker.ts“,”emitter.ts“, “program.ts”,“commandLineParser.ts”,“tsc.ts”,“diagnosticInformationMap.generated.ts”}
- 使用
"include"和"exclude"属性
{ "compilerOptions": { "module": "system", "noImplicitAny": true, "removeComments": true, "preserveConstEnums": true, "outFile": "../../built/local/tsc.js", "sourceMap": true }, "include": "src/**/*" , "exclude": "node_modules", "**/*.spec.ts" }
细节
"compilerOptions"属性可以省略,在这种情况下使用编译器的默认值。请参阅我们的支持的编译器选项的完整列表。
"files"属性获取相对或绝对文件路径的列表。在"include"和"exclude"性质采取的水珠般的文件模式列表。支持的通配符是:
*匹配零个或多个字符(不包括目录分隔符)
?匹配任何一个字符(不包括目录分隔符)
**/递归匹配任何子目录
如果水珠图案的段仅包括*或.*包括在内,则仅与支持的扩展名的文件(例如.ts,.tsx和.d.ts在默认情况下.js和.jsx如果allowJs被设置为真)。
如果"files"和"include"两者都未指定,则编译器默认为包括所有打字稿(.ts,.d.ts和.tsx)文件在含有目录和子目录,除了那些使用排除"exclude"属性。如果设置为true,JS文件(.js和.jsx)也包含在内allowJs。如果指定了"files"or "include"属性,编译器将会包含这两个属性包含的文件的联合。"outDir"除非通过"files"属性显式包含(即使exclude指定了“ ”属性),否则始终排除使用编译器选项指定的目录中的文件。
包含的文件"include"可以使用"exclude"属性进行过滤。但是,显式使用该"files"属性的文件总是包含在内,无论如何"exclude"。未指定时,该"exclude"属性默认为排除,和目录。node_modulesbower_componentsjspm_packages<outDir>
还包括通过"files"或"include"属性包含的文件引用的任何文件。同样,如果文件B.ts被另一个文件引用A.ts,则B.ts不能排除,除非A.ts在"exclude"列表中也指定了引用文件。
请注意,编译器不包含可能成为输出的文件; 例如,如果输入包括index.ts,那么index.d.ts和index.js被排除在外。一般情况下,不建议只有扩展名相互不同的文件。
一个tsconfig.json文件被允许是完全空的,它编译默认包含的所有文件(如上所述)和默认编译器选项。
在命令行中指定的编译器选项会覆盖tsconfig.json文件中指定的选项。
@types,typeRoots和types
默认情况下,所有可见的 “ @types”包都包含在您的编译中。node_modules/@types任何封闭文件夹中的包都被视为可见 ; 具体而言,这意味着内包./node_modules/@types/,../node_modules/@types/,../../node_modules/@types/,等等。
如果typeRoots指定,则只包含下面的包typeRoots。例如:
{
"compilerOptions": {
"typeRoots" : ["./typings"]
}
}这个配置文件将包括所有的软件包./typings,并且没有软件包./node_modules/@types。
如果types指定,则仅包含列出的软件包。例如:
{
"compilerOptions": {
"types" : ["node", "lodash", "express"]
}
}tsconfig.json文件将只包括./node_modules/@types/node,./node_modules/@types/lodash和./node_modules/@types/express。其他软件包node_modules/@types/*将不会包含在内。
指定"types": []禁用@types包的自动包含。
请记住,自动包含仅在使用具有全局声明的文件(而不是声明为模块的文件)时才重要。如果您使用import "foo"的语句,例如,打字稿仍然可以通过寻找node_modules和node_modules/@types文件夹,找到foo包。
配置继承 extends
一个tsconfig.json文件可以使用该extends属性从另一个文件继承配置。
extends是tsconfig.json(旁边compilerOptions,files和include,和exclude)的顶级财产。extends'value是一个字符串,其中包含要继承的另一个配置文件的路径。
基础文件中的配置首先被加载,然后被继承配置文件中的配置覆盖。如果遇到循环,我们会报告错误。
files,include和exclude从继承的配置文件覆盖基本配置文件中的那些。
在配置文件中找到的所有相对路径将相对于它们所在的配置文件进行解析。
例如:
configs/base.json:
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true
}
}tsconfig.json:
{
"extends": "./configs/base",
"files": [
"main.ts",
"supplemental.ts"
]
}tsconfig.nostrictnull.json:
{
"extends": "./tsconfig",
"compilerOptions": {
"strictNullChecks": false
}
}compileOnSave
设置一个顶级属性compileOnSave信号给IDE,在保存时为给定的tsconfig.json生成所有文件。
{
"compileOnSave": true,
"compilerOptions": {
"noImplicitAny" : true
}
}目前,Visual Studio 2015支持TypeScript 1.8.4及更高版本和atom-typescript插件。
架构
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

