typescript要被编译为js才可以运行,就算使用ts-node也是编译到临时文件夹运行,一般编译的配置文件为tsconfig.json
使用tsconfig.json的情况有:
1.不带输入文件调用tsc命令,会寻找并使用当前目录下的tsconfig.json文件
2.不带输入文件调用tsc命令,使用-p、--project选项指定一个包含了tsconfig.json文件的目录
当使用输入文件名时,tsconfig.json文件被忽略
配置选项:
files指定一个包含相对或绝对文件路径的列表。
include、exclude属性指定一个文件glob匹配模式列表。 支持的glob通配符有:
* 匹配0或多个字符(不包括目录分隔符)
? 匹配一个任意字符(不包括目录分隔符)
**/ 递归匹配任意子目录
如果files和include都没有被指定,编译器默认包含当前目录和子目录下所有的TypeScript文件:.ts.d.ts.tsx),并排除在exclude里指定的文件。
如果同时指定files和include,编译器会将他们结合,一并包含进来
如果编译选项中allowJs指定为true,则.js、.jsx也会被包含进来
在outDir中指定的目录默认会被排除在编译输入文件之外,但是当files或include明确包含leoutDir所指定目录时,也会对其进行编译哦
include指定的文件可以使用exclude‘进行过滤,也就是说exclude是大于include’的,但是files指定的文件却不能被exclude排除
任何输入文件所引用的ts文件也会被包含进来,除非被exclude排除
extends:指定了继承的配置文件
compileOnSave:为true则IDE在保存文件的时候重新编译文件
编译选项:
所有compilerOptions下的选项都是编译选项,可以在命令行中指定,命令行选项会覆盖tsconfig.json中选项
typeRoots:
ts编译时需要声明类型的声明文件,有些npm包自带声明文件如index.d.ts,有些则在@types命名空间下,如@types/node包含了node本身的一些对象的声明,如console等,默认情况下所有@types命名空间下的包都会被包含进来作为声明文件,如果指定typeRoots,则只有指定的目录下的包会被包含进来
找不到类型定义编译时会报错:
error TS2688: Cannot find type definition file for 'src'.
types:
与typeRoots类似,不过types直接指定类型定义的包,而typeRoots指定包含类型定义包的目录
注意:typescript在查找类型定义时,如果是全局的类型定义,如console、Promise等,则会使用以上路径查找,而使用import引入的类型定义,则会先去指定包下查找,找不到的话再去以上路径查找
allowJs:是否允许编译js文件,默认false
allowSyntheticDefaultImports:允许从没有设置默认导出的模块中默认导入
allowUnreachableCode:是否允许到达不了的代码,默认为false不允许,为true时,不会报告到达不了代码的错误
alwaysStrict“是否总是以严格模式解析文件,并未每个源文件生成use strict语句
baseUrl:解析非相对模块名的基准目录
charset:输入文件的字符集
checkJs:当编译js文件时,报告其中的错误,需要allowJs
declaration:是否生成相应的.d.ts文件,默认为false
declarationDir:生成.d.ts文件的输出路径,未指定时与生成js文件目录相同
diagnostics:是否显示诊断信息,默认false
disableSizeLimit:是否禁用js工程体积大小的限制,默认false
emitBom:是否在输出文件头加入UTF-8字节序标志
emitDecoratorMetadata:
给源码里的装饰器声明加上设计类型元数据,即design:开头的元数据,有三个design:type、design:returntype、design:paramtypes,分别为类型、返回类型、参数类型,好像可以在运行时获取到ts类型,这几个元数据是当源码对类、方法、属性使用装饰器时,自动加上的
experimentalDecorators:启用实验性的ES装饰器,不启用时使用装饰器会报错
forceConsistentCasingInFileNames:禁止对同一个文件的不一致的引用
inlineSourceMap:生成单个sourceMap文件,而不是生成一个
inlineSources:将sourceMap与代码生成到一个文件
isolatedModules:将每个文件作为单独的模块
jsx:在tsx文件里支持jsx,值为React或Preserve
jsxFactory:当jsx为React时,使用的JSX工厂函数
lib字符串数组,需要引入的库文件列表,如果未指定则对相应的编译目标有相应的默认库
listEmittedFiles:打印编译后生成文件名字
listFiles:编译过程中打印文件名
locale:显示错误信息的语言
maoRoot:为调试器指定sourceMap文件的路径,当.map与.js文件位置不同时使用
maxNodeModuleJsDepth:当allowJs为true时,node_modules搜索依赖的深度
module:生成的模块系统代码:None、CommanJs、AMD、System、UMD、ES6、ES2015
newLine:为生成文件指定行结束符
noEmit:不生成输出文件
noEmitHelpers:不生成用户自定义的帮助函数代码,如__extends
noEmitOnError:当报错时不生成输出文件
noFallthroughCasesInSwitch:报告switch语句的fallthrough错误,即不允许case贯穿执行
noImplicitAny在表达式和类型声明时,有隐含的any类型时报错
noImplicitReturns:不允许函数隐含返回,即所有返回路径必须由返回值
noImplicitThis:当this为any类型时报错
noImplicitUseStrict:输出文件中不包含use strict指令
noLib:不包含默认的库文件
noResolve:不对
noStrictGenericChecks:禁用在函数类型中对范型类型进行严格检查
noUnusedLocals:不允许未使用的局部变量
noUnusedParameters:不允许未使用的函数参数
outDir:重定向输出目录
outFile:将输出文件合并为一个文件
paths:模块名到基于baseUrl路径映射列表
preserveConstEnums:保留const enum声明
preserveSymlinks:不把符号链接解析为真实路径,符号链接文件为真实文件
removeComments:删除所有注释,除了以/!*开头的版权信息
sourceMap:是否生成.map文件
target
:编译目标:ES3为默认、ES5、ES6、ES2015、ES2016、ES2017等