Javascript 在浇铸的对象上使用InstantOf检查类型
我有一个函数,它返回一个类型为Javascript 在浇铸的对象上使用InstantOf检查类型,javascript,typescript,Javascript,Typescript,我有一个函数,它返回一个类型为Bar的对象,如下所示 myFunc() { return <Bar>asyncGet(); / fetches the info and casts the server response to Bar } instanceof无法按预期工作,因为我没有通过bar构造函数实例化bar 如何检查由myFunc返回的对象是否为Bar类型?您可以告诉函数它必须返回的类型:Bar。 例如: myFunc():条{ return asyncGet();/
Bar
的对象,如下所示
myFunc() {
return <Bar>asyncGet(); / fetches the info and casts the server response to Bar
}
instanceof
无法按预期工作,因为我没有通过bar
构造函数实例化bar
如何检查由
myFunc
返回的对象是否为Bar
类型?您可以告诉函数它必须返回的类型:Bar。
例如:
myFunc():条{
return asyncGet();/获取信息并将服务器响应强制转换为Bar
}
这样,您的函数必须返回bar类型。因为您对
asyncGet
的调用可能是异步的-它很可能返回Promise
。因此,您需要要么使用它,要么使用async/await
方法。像这样的东西应该看:
myFunc() {
return <Bar>asyncGet();
}
myFunc().then(bar => { /* do something with it*/});
myFunc(){
返回asyncGet();
}
myFunc().then(bar=>{/*用它做点什么*/});
或
async myFunc(){
返回asyncGet();
}
设bar=wait myFunc();
操作符的实例是本机JavaScript。当代码运行时,Typescript类型转换早已被遗忘;这是编译时的事情。你应该发布你对Bar
的定义和asyncGet()
的签名。否则答案将是一般性的:编译时类型断言(TypeScript有)与运行时类型转换(TypeScript没有)不同;确保asyncGet()
返回某种对象而不是承诺;对对象使用Bar
构造函数以某种方式获取Bar
的实际实例;和/或编写一个用户定义的类型保护,以确定返回的对象是否与Bar
等兼容,但是这可能对操作没有帮助,因为typescript转换不会改变对象的实际类型,如instanceof
所示。我对typescript的经验相对较少,但两者都告诉我instanceof
在typescript中工作得很好。是的,但是instanceof
会告诉你对象的真实类型。如果asyncGet()
返回一个json结构,该结构具有条
字段,强制转换将允许您将其分配给条
,但是instanceof
将不知道您强制转换它,因为实际类型仍然只是对象
。TypeScript与instanceof
存在问题:它是JavaScript,其中键入是名义上的,但不是TypeScript。关于这一差异存在着公开的看法。
myFunc():bar{
return <Bar>asyncGet(); / fetches the info and casts the server response to Bar
}
myFunc() {
return <Bar>asyncGet();
}
myFunc().then(bar => { /* do something with it*/});
async myFunc() {
return <Bar>asyncGet();
}
let bar = await myFunc();