Javascript TypeScript中的对象类型转换
使用Javascript TypeScript中的对象类型转换,javascript,typescript,enums,casting,Javascript,Typescript,Enums,Casting,使用enum进行类型转换在TypeScript中非常有效,直到您想通过util函数进行转换。以下是一个例子: 枚举MyType{ FIRST=“FIRST”, SECOND=“SECOND”, 第三个=“第三个” } 类型TFirst={ 类型:MyTypes.FIRST foo:string } 类型TSecond={ 类型:MyTypes.SECOND foo:string } 类型TThird={ 类型:MyTypes.THIRD 酒吧:字符串 } 类型TMyObject=TFirst |
enum
进行类型转换在TypeScript中非常有效,直到您想通过util函数进行转换。以下是一个例子:
枚举MyType{
FIRST=“FIRST”,
SECOND=“SECOND”,
第三个=“第三个”
}
类型TFirst={
类型:MyTypes.FIRST
foo:string
}
类型TSecond={
类型:MyTypes.SECOND
foo:string
}
类型TThird={
类型:MyTypes.THIRD
酒吧:字符串
}
类型TMyObject=TFirst | TSecond | TThird
常量someFunction=(myObject:TMyObject)=>{
if(myObject.type==MyTypes.FIRST | | myObject.type==MyTypes.SECOND){
//这里,typescript确切地知道myObject是TFirst或TSecond
console.log(myObject.foo)
}
}
常量isFirstOrSecondUtil=(myObject:TMyObject):布尔=>{
返回myObject.type==MyTypes.FIRST | | myObject.type==MyTypes.SECOND
}
const otherFunction=(myObject:TMyObject)=>{
如果(第一个或第二个对象(myObject)){
//typescript知道myObject是TMyObject,但不知道确切的类型
console.log(myObject.foo)
}
}
您可以在中进行测试
正如您在第27行的someFunction
TypeScript中所看到的,即使该函数接收TMyObject
,它也完全知道myObject
的类型是tffirst
或TSecond
。我能够使用myObject.foo
而没有任何问题,因为这两种类型的属性都有
另一方面,我在otherFunction
中使用util函数isfirst或secondutil
(它执行与在someFunction
中相同的检查),显然在这种情况下类型检查失败。在第38行,TypeScript不知道确切的类型是myObject
。我希望能够控制台myObject.foo
,但TypeScript失败,因为属性“foo”在类型“TThird”上不存在。
有没有关于如何通过util函数进行正确类型转换的建议?您可以告诉Typescript返回的布尔值指示类型:
const isFirstOrSecondUtil = (myObject: TMyObject): myObject is TFirst | TSecond =>
myObject.type === MyTypes.FIRST || myObject.type === MyTypes.SECOND;
哇!太棒了。谢谢你的快速回答。