覆盖严格空检查的输入

时间:2016-10-10 09:21:42

标签: typescript typescript-typings typescript2.0

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

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

A中的相关类型如下:

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

BC中使用的内容如下:

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

interface IExtended extends IInterface {
  myOptionalProperty?: string
}

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

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'

问题是双重的:

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

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

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

  2. 如果可能的话,应该如何包含BC中的输入与我的重写类型进行核对,而不是其本地node_modules目录中的内容

1 个答案:

答案 0 :(得分:5)

可以告诉编译器跳过对正在使用的库的检查 compiler options现在有skipDefaultLibCheck

  

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

skipLibCheck

  

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

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

what's new for typescript 2中有更多关于它的内容:

  

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