转译时排除 *.spec.ts 文件,但仍能正确 lint

Posted

技术标签:

【中文标题】转译时排除 *.spec.ts 文件,但仍能正确 lint【英文标题】:Exclude *.spec.ts files when transpiling but still lint them properly 【发布时间】:2019-02-19 18:06:26 【问题描述】:

如何排除 typescript 文件被转译,但仍确保它们与 Atom 编辑器中的 linter 一起正常工作?

我的*.spec.ts 文件中出现此错误:

ES5/ES3 中的异步函数或方法需要“Promise” 构造函数。确保您有“承诺”的声明 构造函数或在 --lib 选项中包含“ES2015”。

出现问题是因为我明确排除了包含所有测试文件的目录(请参阅下面的 tsconfig 文件),因为我不希望在构建项目时将这些文件转译为 javascript。但是,当我在 Atom 编辑器中查看这些文件时,我确实希望 tslint 插件正确地检查这些文件。

我的设置:

Atom.io 1.30 带插件: 原子打字稿 12.6.3 语言-打字稿 0.4.0 linter-tslint 1.9.1 tslint 5.9.1 打字稿 3.0.1

我的tsconfig.json 文件:


  "compileOnSave": false,
  "compilerOptions": 
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "baseUrl": ".",
    "declaration": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "inlineSourceMap": true,
    "inlineSources": true,
    "lib": [
      "es2017",
      "dom"
    ],
    "moduleResolution": "node",
    "newLine": "lf",
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "outDir": "./dist",
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ]
  ,
  "exclude": [
    "./spec",
    "./dist"
  ]

【问题讨论】:

【参考方案1】:

您需要使用两个tsconfig.json 文件,一个用于编辑器(包括*.spec.ts 文件),另一个用于编译(不包括它们)。您可以使用extends 在两个文件之间共享大部分选项。见this discussion。

【讨论】:

这对我有用。我能够在我的 spec/ 目录中添加第二个 tsconfig.json 文件。 Atom 编辑器自动找到该文件并使用它覆盖父目录中的主 tsconfig 文件。

以上是关于转译时排除 *.spec.ts 文件,但仍能正确 lint的主要内容,如果未能解决你的问题,请参考以下文章

带有 TypeScript 解析器/插件的 ESLint:如何包含从 tsconfig.json 中排除的 .spec.ts?

报错但仍能正常运行

如何使我的 Web 应用程序无状态但仍能做一些有用的事情?

仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)

Angular CLI 生成的“spec.ts”文件有啥用?

*.directive.spec.ts 中的错误 TS2554