我有一個功能wrap
可以採取T
或Wrapped<T>
並返回Wrapped<T>
。TypeScript 1.4:使用類型聯合
宣佈在TS 1.0:現在
wrap<T>(value: Wrapped<T>, defaultValue?: T): Wrapped<T>;
wrap<T>(value: T, defaultValue?: T): Wrapped<T>;
在1.4,我想用union類型來定義的概念, 「無論是T
或Wrapped<T>
」
class Bar {
thing: Wrapped<number>;
constructor(thing: number | Wrapped<number>) {
this.thing = wrap(thing);
}
}
但類型檢查this.thing
錯誤與:
類型包裝<號碼包裹<號碼>>不可分配包裝<號碼>
類型'number |裹<號>」是不能分配給類型號
我明白,錯誤是,我傳遞給wrap
值number | Wrapped<number>
和wrap
只知道如何處理number
和Wrapped<number>
;
所以我第一次嘗試去宣佈它可以處理T | Wrapped<T>
;
wrap<T>(value: T | Wrapped<T>, defaultValue?: T): Wrapped<T>;
wrap<T>(value: Wrapped<T>, defaultValue?: T): Wrapped<T>;
wrap<T>(value: T, defaultValue?: T): Wrapped<T>;
但類型檢查仍然錯誤。如果我右鍵單擊並進入定義,我會看到它仍然綁定到列表中的第三個定義,而不是我先前的更高優先級簽名T | Wrapped<T>
。
這是預期的行爲?
我應該用類型警衛來解決這本手冊嗎?如果是這樣,有人可以告訴我如何使用這個通用包裝,我有?如何從我的thing
變量中獲取類型參數?
所以答案是:刪除舊的簽名和允許新的簽名做雙方的工作。涼。我希望能有這樣簡單的東西。再次感謝瑞恩! (你在平局中速度很快)。 – masonk