持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
我们先来看一个简单的 tsconfig 文件:
{
"compilerOptions": {
"outDir": "./dist",
"allowJs": true,
"target": "es5"
},
"include": ["./src/**/*"]
}
编译文件的选择
说到编译,不得不提一个知名选手babel。 和 TypeScript 类似, 他们都可以将一种语法静态编译成另外一种语法。如果说我想编译一个文件,我只需要告诉 babel 我的文件路径即可。
当我们执行tsc ./demo.ts的时候,typescript 会利用 tsconfig.json 文件进行编译吗?
答案是不会,只有当我们执行tsc,后面不要跟任何文件,编译的时候才回去利用tsconfig.json。所以,编译的时候最好直接使用tsc命令即可,后面不需要跟任何命令配置。
对编译文件的选择,即那些编译,那些不编译,有三种方式来设置:
通过设置include 和 exclude来设置
可以使用通配符来选择编译的文件。
{
include: ["src/**/*"],
exclude: ["node_modules", "**/*.spec.ts"]
}
通过files属性来配置
files里面不能使用通配符进行匹配,只能写具体的文件路径。
另外,在files里面可以把类型文件也加入进去,当我们写的类型声明文件会自动加入到编译过程中,于是就能获得类型提示,即使你把类型声明文件关闭后也能获得提示。
{
files: ["test.ts", "test.d.ts"]
}
通过rootDir来设置
用来指定编译文件的根目录,编译器会在根目录查找入口文件。
"rootDir": "./src"
编译选项的配置
{
"complierOptions": {
// 编译后导出到那个目录下
"outDir": "./build",
// 最后编译成的模块化规范,对于前端来说一般选择ESNext
"module": "ESNext",
最后编译的es的版本,为了兼容老旧的浏览器,可以选择ES5
"target": "ES5",
// 设置后每个ts文件都会生成一个.d.ts的声明文件
"declaration": true,
// 编译过程中去除注释
"removeComments": true,
// 增量编译,即当编译一次后,后面增加了内容,再次编译的时候只编译后来增加的内容。当增量编译后,会在根目录下产生tsconfig.tsbuildinfo文件,这个文件就是ts来记录那些是编译的。
"incremental": true,
// 默认只能编译ts文件,这个属性设置后也可以编译js文件
"allowJs": true
// 对js文件也做检查,比如我访问一个不存在的变量,那么ts就会马上出现提示
"checkJs": true
// 必须显示指定变量的类型是any,注意需要把"strict": true 注释掉
"noImplicitAny": false
// 对变量赋值不能直接复制null 或者undefined
"strictNullChecks": false
// 对没有使用的变量,以及函数中没有使用的参数进行错误提示
"noUnusedLocals": true
"noUnusedParameters": true,
"esModuleInterop": true
}
}
esModuleInterop
在ts代码中,我们所有的引入方式都是通过import的方式来引入的,为什么我们可以使用import的方式引入commonjs的包呢?
就是因为esModuleInterop选项的作用是支持使用import d from 'cjs'的方式引入commonjs包。
noImplicitAny
// 下面name是隐式的any类型,这样写会出现错误提示
function abc(name) {
return name
}
// 修改
function abc(name: any) {
return name
}
对没有使用的变量进行错误提示
我们在开发中可能需要对不适用的变量不进行错误提示,当我们只关闭 eslint 的错误提示是不生效的,还需要修改tsconfig.json里面的配置。
"noUnusedLocals": false
"noUnusedParameters": false