我有TypeScript函数,该函数基于输入值返回两个不同对象之一:
function myfunc(isError:boolean): {response:string}|{error:string} {
if(isError) return {error:''}
return {response:''}
}
然后我尝试使用它并获取返回对象的属性,但出现TypeScript错误:
const answer = myfunc(true);
if(answer.error) {...}
else return answer.response;
类型'{response:string} | {error:string}'不存在属性'error'
我知道我可以检查对象中的属性,但是我不想为每个属性执行此操作。
答案 0 :(得分:1)
发生这种情况是因为类型{response:string}|{error:string}
不能保证错误存在,您可以使用以下可选属性创建一个接口:
interface answer {
error?: string;
response?: string;
}
,然后相应地键入您的函数。
如果您不想这样做,可以键入对象,但是写起来可能并不那么漂亮:
if((<{error: string}>answer).error) {...}
else return (<{error: response}>answer).response;
编辑:如前所述,您的代码在较新的TypeScript版本中可以正常工作,您应该考虑对其进行更新
答案 1 :(得分:0)
我找到了适合我的解决方案。 我创建了两个接口,并为它们添加了Partial:
interface Response {response:string}
interface ErrMsg {error:string}
function myfunc(isError:boolean): Partial<Response&ErrMsg> {
if(isError) return {error:''}
return {response:''}
}