首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提供typescript中未知返回类型函数的默认值

如何提供typescript中未知返回类型函数的默认值
EN

Stack Overflow用户
提问于 2021-08-03 02:58:17
回答 1查看 58关注 0票数 0

我有一个返回类型为typeXYZ || unknown的customizedHook。我想要解构返回值,但我有错误字符串,甚至数据返回为xyz:{},abc返回‘TS2339: Property 'xyz' does not exist on type 'unknown'. 1’,'string2‘,我该如何解决它?

代码语言:javascript
运行
复制
export function useAPICall(): typeXYZ || unknown {
  const {data} = useQuery(['apiCallData'], async () => {
    const value: typeABC = (await cbFunction()) as typeABC;
    return value?.defaultValue;
  });



  return {data};
//console.log(data)
//{xyz: {abc: 'asdasda', cde: 'xzczxc'}, abc: ['aaaa','bbbb','cccc']}

}

const {xyz: {}, abc: string[]} = useAPICall()
EN

回答 1

Stack Overflow用户

发布于 2021-08-03 03:35:50

当您使用像TypeXYZ | unknown这样的联合类型(它是一个单独的管道)时,类型限制比联合中的任何单个类型都严格,这与您可能想象的相反。

例如,如果你有这样的代码:

代码语言:javascript
运行
复制
   const a = get_value() as number | string;
   const b = parseInt(a, 10);

你会得到一个类型错误,因为parseInt不允许数字类型的参数。换句话说,使用联合编写的任何代码都必须对联合中的所有类型有效。因为unknown是所有类型中限制性最强的(您通常必须将其强制转换为某种类型才能使用它),所以它实际上完全覆盖了XYZ。

但是,如果您使用的是限制最少的any类型,那么使用TypeXYZ就没有任何意义了,因为any允许您对对象执行任何操作。

如果您正在解构xyz,那么您必须(或者应该!)在执行此操作之前,请确保对象的类型为TypeXYZ,在这种情况下,可以使用as TypeXYZ对其进行强制转换。

记住,Typescript对你的运行时类型一无所知,如果你的API返回了一些意想不到的东西,那是Typescript无法帮助你的情况。因此,如果您的API返回的数据可能采用多种形式,则需要执行一些运行时类型检查,例如:

代码语言:javascript
运行
复制
 const res = useApiCall();
 if (res.xyz) {
   const { xyz } = res as TypeXYZ;
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68629863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档