Typescript 在正确识别对象类型之前,为什么需要强制枚举值?
我有一个对象,它在Typescript 在正确识别对象类型之前,为什么需要强制枚举值?,typescript,enums,Typescript,Enums,我有一个对象,它在type属性上可以是给定枚举的任何值。当我创建一个有效对象并将其传递给函数时,typescript会抱怨类型不匹配。但是,如果强制使用枚举值,则可以 枚举AorB{ A=‘A’, B=‘B’, }; 类型Bar_A={ 类型:AorB.A; }; 类型Bar_B={ 类型:AorB.B; } 钢筋类型=钢筋A |钢筋B; 函数foo(a:Bar):void{} 常数arg={ 类型:AorB.A, }; //这会起作用,但是额外的写作 //常数arg={ //类型:AorB.A
type
属性上可以是给定枚举的任何值。当我创建一个有效对象并将其传递给函数时,typescript会抱怨类型不匹配。但是,如果强制使用枚举值,则可以
枚举AorB{
A=‘A’,
B=‘B’,
};
类型Bar_A={
类型:AorB.A;
};
类型Bar_B={
类型:AorB.B;
}
钢筋类型=钢筋A |钢筋B;
函数foo(a:Bar):void{}
常数arg={
类型:AorB.A,
};
//这会起作用,但是额外的写作
//常数arg={
//类型:AorB.A作为AorB.A
// };
foo(arg);//错误
福({
类型:AorB.A,
})
请参阅等效的类型脚本将扩展文本类型,除非它有理由保留它们,因此
arg
将被键入为{type:AorB}
而不是{type:AorB.a,}
如果显式使用类型断言AorB.a作为AorB.a,那么typescript将保留文字类型。如果将对象文字指定给需要条
(例如函数的参数)的位置,typescript将再次保留文字类型
另一个可行的选项是显式键入arg
:
const arg: Bar = {
type: AorB.A,
};
foo(arg);
foo({
type: AorB.A,
})
或者在3.4中使用
as const
,让编译器保留文本类型,而无需再次指定类型,尽管这将使整个对象成为只读对象 Typescript将扩展文本类型,除非它有理由保留它们,因此arg
将被键入为{type:AorB}
而不是{type:AorB.a,}
如果显式使用类型断言AorB.a作为AorB.a,那么typescript将保留文字类型。如果将对象文字指定给需要条
(例如函数的参数)的位置,typescript将再次保留文字类型
另一个可行的选项是显式键入arg
:
const arg: Bar = {
type: AorB.A,
};
foo(arg);
foo({
type: AorB.A,
})
或者在3.4中使用
as const
,让编译器保留文本类型,而无需再次指定类型,尽管这将使整个对象成为只读对象 不幸的是,我不能将用作常量。我得到了这个错误:一个“const”断言只能应用于字符串、数字、布尔值、数组或对象文字。
我真的不明白为什么AorB。A
被扩展到AorB
。这似乎没有什么用处,但我肯定有一些后果我没有想到:)谢谢你的帮助answer@Awinograd{type:AorB.A,}作为常量
工作<代码>{type:AorB.A as const,}
目前不工作,但很快就会工作。啊,你说得对!不确定我怎么会错过尝试(即使在错误消息中这样说)。谢谢@titianu,我不能将用作常量
。我得到了这个错误:一个“const”断言只能应用于字符串、数字、布尔值、数组或对象文字。
我真的不明白为什么AorB。A
被扩展到AorB
。这似乎没有什么用处,但我肯定有一些后果我没有想到:)谢谢你的帮助answer@Awinograd{type:AorB.A,}作为常量
工作<代码>{type:AorB.A as const,}目前不工作,但很快就会工作。啊,你说得对!不确定我怎么会错过尝试(即使在错误消息中这样说)。谢谢你,提香