我想在接口中定义属性的类型,使其等于枚举的某些值。
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。
答案 0 :(得分:2)
在打字稿中,枚举基本上是数字,所以即使这样也不会出现编译错误:
let a: Type = 22;
所以基本上Type.one | Type.two
是number
,而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;