属性“ ...”在类型“ {...} | {...}”上不存在

时间:2020-09-10 09:31:52

标签: typescript

我有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'

我知道我可以检查对象中的属性,但是我不想为每个属性执行此操作。

2 个答案:

答案 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:''}
}