我不知道为什么以下代码会混淆编译器。
enum Enum {
a,
b,
c
}
const func = <T extends Enum>(param: T = Enum.a) => param;
在这里,我将T
约束为Enum
类型,并将默认参数设置为枚举数Enum.a
。但是TypeScript在(param: T = Enum.a)
部分失败,并显示消息Type 'Enum.a' is not assignable to type 'T'.
我在这里想念的是什么,因为我不能自己弄清楚它,而我只能找到基本的在线资源呢?
答案 0 :(得分:3)
由于与以下错误相同的原因,这是一个错误:
class Bar {
bar = 123
}
const a = new Bar();
// Error `Bar` is not assignable to `T`
const bar = <T extends Bar>(param: T = a) => param;
因为T
可能是扩展 Bar
的一部分,因此Bar
将不是兼容的值。
class Baz extends Bar {
baz = 456;
}
const example:Baz = bar<Baz>(); // will blow up