2016-11-19 129 views
0

我試圖創建一個有兩個類型參數,其中一種類型的參數使用另一個爲打字稿函數的值時,編譯錯誤TS2322誤差爲行const wrapper: W = { value: val };打字稿分配泛型類型

test.ts(6,11): error TS2322: Type '{ value: T; }' is not assignable to type 'W'. 

然而,如W延伸Wrapper<T>,所分配的值{ value: val }其中valT型的應該是有效的。

爲什麼在這種情況下TypeScript編譯器會產生編譯錯誤?

回答

2

您正在創建可能無法指定給W的對象。例如:

interface ExtendedWrapper<T> extends Wrapper<T>{ 
    anotherValue: T; 
} 

{ value: 1 }是不能分配給ExtendedWrapper<number>(財產anotherValue缺失)。

您可以使用類型聲明const wrapper = { value: val } as W;來克服此問題,但請記住takesWrapper函數需要擴展類型。