覆盖严格空检查的输入

Vid*_*dar 2 typescript typescript-typings typescript2.0

我想切换到对我的typescript 2.0项目使用严格的空值检查,但是我对我的一个依赖项(依赖祖父母,如果你愿意)的依赖关系的类型有一些困难.

详细地说,我有依赖关系B和C其中两个依赖A.所有这些都是已编译的TS项目,代码和打字在lib文件夹中可用,并且它们尚未切换到严格的空检查.

相关的A类型如下:

interface IInterface {
  [key: string]: string;
}
Run Code Online (Sandbox Code Playgroud)

其中中都使用了B和C如下:

import { IInterface } from 'A/lib/iinterface';

interface IExtended extends IInterface {
  myOptionalProperty?: string
}
Run Code Online (Sandbox Code Playgroud)

使用严格的空值检查,这会产生以下编译错误:

node_modules/B/lib/extended.d.ts(4,3): error TS2411: Property 'myOptionalProperty' of type 'string | undefined' is not assignable to string index type 'string'
node_modules/C/lib/extended.d.ts(4,3): error TS2411: Property 'myOptionalProperty' of type 'string | undefined' is not assignable to string index type 'string'
Run Code Online (Sandbox Code Playgroud)

问题是双重的:

  1. 为了遵守严格的检查,A中的输入需要更改为:

    interface IInterface { [key: string]: string | undefined; }

    我不确定是否可以覆盖这样的类型,因为这不仅仅是现有类型的扩展.如果可能的话,它是如何完成的?

  2. 如果可能的话,应该如何包含这样的内容,以便在我的重写类型中检查B和C检查,而不是它们的本地node_modules目录中的内容?

Nit*_*mer 5

可以告诉编译器跳过对正在使用的库的检查.
该编译器选项现在有skipDefaultLibCheck:

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

而且skipLibCheck:

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

因此,如果使用该选项进行编译,true那么您不应该为正在使用的库获取错误.

在typecript 2的新内容中有更多关于它的内容:

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