【发布时间】:2016-11-19 17:56:29
【问题描述】:
我正在尝试创建一个具有两个类型参数的 TypeScript 函数,其中一个类型参数使用另一个类型参数:
interface Wrapper<T> {
value: T;
}
function func<T, W extends Wrapper<T>>(val: T, takesWrapper: (w: W) => void) {
const wrapper: W = { value: val };
takesWrapper(wrapper);
}
func(32, num => { console.log(Math.abs(num.value) + 10); });
TypeScript 编译器在 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 编译器会产生编译错误?
【问题讨论】:
标签: generics typescript