Typescript strictNullChecks,范围有限

Wal*_*t W 8 typescript

我正在使用带有Typescript的Ionic v2 beta,并且很乐意使用它--strictNullChecks.然而,我的项目的相关性,比如@角/核心,当我把原因编译错误strictNullChecks: true在我tsconfig.json.

有没有办法将目录/文件/模块/类声明为遵守strictNullChecks,即使整个项目无法使用标志进行编译?

看起来,由于--strictNullChecks不是默认值,因此在没有标志的情况下编写的依赖项将使用极其有限(尽管是一个非常有用的功能).

dan*_*nvk 11

如果您想扩展strictNullChecks到项目中的特定目录,可以使用您的项目中的extends子句tsconfig.json.例如,如果您的项目如下所示:

a/
  code.ts
b/
  other.ts
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

并且您希望在其中启用严格的空值检查a,您可以添加a/tsconfig.json:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "strictNullChecks": true
  }
}
Run Code Online (Sandbox Code Playgroud)

当您tsc从内部目录运行时a,您将获得严格的空检查a/code.ts.

这种方法并非没有缺点:

  • 如果是a/code.tsimport ../b/other.ts,那么你也会得到严格的null检查b/other.ts.
  • 如果tsc从根目录运行,则不会进行严格的空检查a/code.ts.

您正在大型项目中有效地创建一个新的,严格的子项目.您需要确保tsc在构建过程中为两个项目运行.它并不完美,但它可能会帮助您逐步迁移大型项目strictNullChecks.


Nit*_*mer 4

如果您的依赖项全部位于.jsand.d.ts文件中(即,不是 ts 源),那么您可以使用一个标志并告诉编译器跳过检查您的库,这将导致库中不会出现错误。

\n

为此有两个新标志:

\n

skipLibCheck

\n
\n

不要\xe2\x80\x99t检查默认库( lib.d.ts)文件\xe2\x80\x99s的有效性

\n
\n

skipDefaultLibCheck

\n
\n

不要\xe2\x80\x99t 检查用户定义的默认库 ( *.d.ts) 文件\xe2\x80\x99s 的有效性

\n
\n

有关更多信息,请参阅Typescript 2 的新增功能

\n
\n

TypeScript 2.0 添加了一个新的--skipLibCheck编译器选项,\n它会导致\n跳过声明文件(扩展名为 的文件.d.ts)的类型检查。当程序包含大型声明文件时,编译器会花费大量时间对已知不包含错误的声明进行类型检查,并且通过跳过声明文件类型检查可能会显着缩短编译时间。

\n

--skipLibCheck由于一个文件中的声明可能会影响其他文件中的类型检查,因此在指定时可能无法检测到某些错误。例如,如果非声明文件扩充了声明文件中声明的类型,则可能会导致仅在检查声明文件时才报告的错误。但实际上,这种情况很少见。

\n
\n

  • 谢谢你!将 `"skipLibCheck": false` 放入我的 `tsconfig` 中适用于我的情况。然而,我仍然认为,要么 --strictNullChecks 应该是默认值(强制每个人适当地调整他们的定义),要么需要有一种方法将不遵守严格空检查的打字稿代码集成到不遵守严格空检查的代码库中。我想多个“tsconfig”可能是一个选择。 (2认同)
  • `skipLibCheck` 不会跳过一般的 `*.ts` 文件,即使它们存在于 `node_modules` 下。 (2认同)