首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript:推断嵌套对象中的属性类型

Typescript:推断嵌套对象中的属性类型
EN

Stack Overflow用户
提问于 2021-06-23 17:29:01
回答 1查看 106关注 0票数 0

我使用的是graphql,还有一个ConnectionType,它有pageInfoedges属性。在这种情况下,我必须使用pageInfo.hasNextPagepageInfo.endCursor以及从edges映射而来的nodes。我可以像下面这样手动使用。

代码语言:javascript
复制
const { hasNextPage, endCursor } = pageInfo ?? {};
const nodes = edges.flatMap(edge => edge?.node ?? []) ?? [];

Evenry ConnectionTypepageInfoedges字段。另外,edge字段有node字段,所以我可以像上面的代码一样从edge映射node。但是,node类型可以彼此不同。

这段代码是重复的,所以我想把这个函数提取为util。

代码语言:javascript
复制
interface PageInfo {
  hasNextPage: boolean;
  endCursor: string;
}

interface Connection<Edge> {
  pageInfo: PageInfo;
  edges: Edge[];
}

interface Response<Node> {
  hasNextPage: boolean;
  endCursor: string;
  nodes: Node[];
}

const extractConnectionInfo = <Edge extends { node?: Node }>({ edges, pageInfo }: Connection<Edge>): Response<Node>  => {
   ...parsing work
}

在上面的代码中,我无法推断node的类型。我收到unknown[]作为响应。

代码语言:javascript
复制
// type of nodes is "unknown[]"
const { nodes } = extractConnectionInfo({ edges, pageInfo });

有没有办法从嵌套对象的函数参数中推断出node类型?嵌套的对象是edge,结构如下。

代码语言:javascript
复制
edge: {
  node: {
    ...properties which are different from other node.
  }
}

我可以使用“类型断言”将node的类型通知给VSCode,但我想从函数参数推断类型。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-23 20:22:09

我相信这应该可以做到:

代码语言:javascript
复制
declare const extractConnectionInfo: <
    Edge extends { node?: unknown }
>(data: Connection<Edge>) => Response<Edge['node']>

playground link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68097166

复制
相关文章

相似问题

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