为什么我不能在打字稿中访问子属性?

时间:2019-08-02 17:48:58

标签: arrays typescript

我有一个打字稿代码:

export interface SelectQuery_thing {
  __typename: "ThingQueryPayload";
  content: (SelectQuery_thing_content | null)[];
  pageInfo: SelectQuery_thing_pageInfo;
}

export interface SelectQuery_thing_content {
  __typename: "Thing";
  id: string;
  name: string;
}

我想通过一个函数访问名称:

const itemToString = (data: SelectQuery_thing) => data && data.content && data.name

但是我得到了

Property 'name' does not exist on type 'SelectQuery_thing_content[]'

How can I access name?

1 个答案:

答案 0 :(得分:1)

data.name不存在,因为它是SelectQuery_thing,但是data.content存在。 data.content是SelectQuery_thing_content[],它是array。 要访问.name,您需要先索引数组,例如:

data.content[index].name;

在建立索引之前,我会检查数组的长度。

如果要检查是否所有名称都存在,则可以使用every();

data.content.every(val => !!val.name);

一起

const itemToString = (data: SelectQuery_thing) => 
                       data && data.content && 
                       data.content.length > 0 && 
                       data.content.every(val => !!val.name);// or (({name}) => !!name)