ts学习心得: 配置文件tsconfig.json

171 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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