具有有限范围的Typescript strictNullChecks

时间:2016-10-20 20:34:10

标签: typescript

我正在使用带有Typescript的Ionic v2 beta,并且希望使用--strictNullChecks。但是,当我将strictNullChecks: true放入tsconfig.json时,我的项目的依赖项(例如@ angular / core)会导致编译错误。

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

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

5 个答案:

答案 0 :(得分:10)

如果您希望将strictNullChecks范围扩展到项目中的特定目录,则可以使用extends中的tsconfig.json子句来执行此操作。例如,如果您的项目如下所示:

a/
  code.ts
b/
  other.ts
tsconfig.json

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

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "strictNullChecks": true
  }
}

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

这种方法并非没有缺点:

  • 如果a/code.ts导入../b/other.ts,那么您也会对b/other.ts进行严格的空检查。
  • 如果从根目录运行tsc,则不会对a/code.ts进行严格的空检查。

您正在大型项目中有效地创建一个新的,严格的子项目。作为构建过程的一部分,您需要确保为两个项目运行tsc。它并不完美,但它可以帮助您将大型项目逐渐迁移到strictNullChecks

答案 1 :(得分:3)

  

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

没有。

注意:有一项功能请求可以忽略尚未实现的某些文件的错误:https://github.com/Microsoft/TypeScript/issues/11051

答案 2 :(得分:2)

如果您的依赖项都在.js.d.ts文件中(即不是ts源代码),那么您可以使用一个标志并告诉编译器跳过检查您的库,这将导致no来自libs的错误。

two new flags

skipLibCheck:

  

不要检查默认库(lib.d.ts)文件的有效性

skipDefaultLibCheck:

  

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

What's new in Typescript 2

中更多关于它的内容
  

TypeScript 2.0添加了一个新的--skipLibCheck编译器选项   声明文件(扩展名为.d.ts的文件)​​的类型检查   跳过。当程序包含大型声明文件时,编译器   花费大量时间类型检查已知的声明   不包含错误,编译时间可能很大   通过跳过声明文件类型检查缩短了。

     

由于一个文件中的声明会影响其他文件中的类型检查   文件,--skipLibCheck时可能无法检测到某些错误   指定。例如,如果非声明文件增加了类型   在声明文件中声明,可能只会导致错误   检查声明文件时报告。但是,在实践中   这种情况很少见。

答案 3 :(得分:1)

没有

strictNullChecks的工作原理是从所有类型的域中删除undefinednull值。这是一个全局设置,可以改变所有类型解释的行为方式。

甚至没有一个连贯的定义来说明这个标志关闭的文件或模块或类是什么意思 - 就像在一个国家和另一个国家的物理定律不同,即使你可以在这些国家之间自由运送货物和人员。

答案 4 :(得分:0)

您可以使用 typescript-strict-plugin,它允许您在特定文件或目录中打开严格模式。但它不适用于特定的 tsc 选项。