typescript的编译配置

typescript要被编译为js才可以运行,就算使用ts-node也是编译到临时文件夹运行,一般编译的配置文件为tsconfig.json


使用tsconfig.json的情况有:
1.不带输入文件调用tsc命令,会寻找并使用当前目录下的tsconfig.json文件

2.不带输入文件调用tsc命令,使用-p、--project选项指定一个包含了tsconfig.json文件的目录

当使用输入文件名时,tsconfig.json文件被忽略


配置选项:

files指定一个包含相对或绝对文件路径的列表。 

includeexclude属性指定一个文件glob匹配模式列表。 支持的glob通配符有:

* 匹配0或多个字符(不包括目录分隔符)

? 匹配一个任意字符(不包括目录分隔符)

**/ 递归匹配任意子目录

如果filesinclude都没有被指定,编译器默认包含当前目录和子目录下所有的TypeScript文件:.ts.d.ts.tsx),并排除在exclude里指定的文件。

如果同时指定filesinclude,编译器会将他们结合,一并包含进来

如果编译选项中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等

你可能感兴趣的:(typescript)