2016-10-10 71 views
2

我想切換到我的打字稿2.0項目中使用嚴格null檢查,但我有,如果你想與我的一個依賴(依賴祖父母的依賴的分型一些困難)。覆蓋打字嚴格的空檢查

更詳細地說,我有依賴關係BC,這兩者都取決於A。所有這些都是經過傳輸的TS項目,代碼和類型可在lib文件夾中找到,並且它們尚未切換到嚴格的空檢查。是

A相關的分型似如下:

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

這是在兩個BC使用方法如下:

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

interface IExtended extends IInterface { 
    myOptionalProperty?: string 
} 

憑藉嚴格的null檢查,這給下面的編譯錯誤:

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目錄?

+0

理想的解決方案,當然是有項目'A'添加這些分型的自己,我已經有一個公關到效果,但會有相當在接受並傳播到項目'B'和'C'之前的一段時間,所以我正在尋找臨時解決方法。 – Vidar

回答

4

可以告訴編譯器跳過對正在使用的庫的檢查。
compiler options現在有skipDefaultLibCheck

Don’t check a user-defined default library (*.d.ts) file’s validity.

而且skipLibCheck

Don’t check a the default library (lib.d.ts) file’s validity.

因此,如果您編譯使用該選項設置爲true那麼你不應該得到您所使用的庫錯誤。

有更多關於它的what's new for typescript 2

TypeScript 2.0 adds a new --skipLibCheck compiler option that causes type checking of declaration files (files with extension .d.ts) to be skipped. When a program includes large declaration files, the compiler spends a lot of time type checking declarations that are already known to not contain errors, and compile times may be significantly shortened by skipping declaration file type checks.

+0

謝謝!我在尋找解決方案時遇到了這個標誌,但誤解了它的作用。解決問題並加快構建時間:) – Vidar