打字稿分配泛型类型
问题描述:
我试图创建一个有两个类型参数,其中一种类型的参数使用另一个为打字稿函数的值时,编译错误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 }
其中val
是T
型的应该是有效的。
为什么在这种情况下TypeScript编译器会产生编译错误?
答
您正在创建可能无法指定给W
的对象。例如:
interface ExtendedWrapper<T> extends Wrapper<T>{
anotherValue: T;
}
{ value: 1 }
是不能分配给ExtendedWrapper<number>
(财产anotherValue缺失)。
您可以使用类型声明const wrapper = { value: val } as W;
来克服此问题,但请记住takesWrapper
函数需要扩展类型。