未检测到不兼容的枚举值

时间:2017-05-05 16:13:05

标签: typescript

我想在接口中定义属性的类型,使其等于枚举的某些值。

Enum无法控制。但是,如果我用其实际值替换兼容的Enum值,则控制完成。

你能看到解决方案吗?

enum Type {
    one = 1,
    two = 2
}

// --------------------------------

interface CheckType_KO {
    type: Type.one | Type.two // <--- I want to define the type like that
}

let bad_compatibility_check: CheckType_KO = {
    type: 4 // <--- it's a bad value, but there is no error ! >>>> KO
}

// --------------------------------

interface CheckType_OK {
    type: 1 | 2 // <--- the the real value directly
}

let good_compatibility_check: CheckType_OK = {
    type: 4 // <---- the bad value is detected
}

您可以测试代码here

1 个答案:

答案 0 :(得分:2)

在打字稿中,枚举基本上是数字,所以即使这样也不会出现编译错误:

let a: Type = 22;

所以基本上Type.one | Type.twonumber,而1 | 2保持1 | 2

这是另一个讨论它的主题:Implicit number to enum cast

如果您希望使用枚举进行类型安全,那么您需要使用实际的枚举,例如:

enum Type {
    one = 1,
    two = 2,
    three = 3
}

interface CheckType_KO {
    type: Type.one | Type.two;
}

let bad_compatibility_check: CheckType_KO = {
    type: Type.three
}

出现以下编译错误:

  

输入&#39; {type:Type.three; }&#39;不能指定类型&#39; CheckType_KO&#39;。
  财产类型&#39;类型&#39;是不相容的。
  键入&#39; Type.three&#39;不能分配类型&#39; Type.one | Type.two&#39;