为什么TypeScript不允许将通用枚举值作为默认参数值

时间:2018-10-08 20:36:40

标签: typescript enums compiler-errors typechecking

我不知道为什么以下代码会混淆编译器。

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'.

我在这里想念的是什么,因为我不能自己弄清楚它,而我只能找到基本的在线资源呢?

这里是playground url

1 个答案:

答案 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