Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在浇铸的对象上使用InstantOf检查类型_Javascript_Typescript - Fatal编程技术网

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();