打字稿分配泛型类型

打字稿分配泛型类型

问题描述:

我试图创建一个有两个类型参数,其中一种类型的参数使用另一个为打字稿函数的值时,编译错误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编译器会产生编译错误?

您正在创建可能无法指定给W的对象。例如:

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

{ value: 1 }是不能分配给ExtendedWrapper<number>(财产anotherValue缺失)。

您可以使用类型声明const wrapper = { value: val } as W;来克服此问题,但请记住takesWrapper函数需要扩展类型。