在打字稿中有没有办法访问类型数组的接口属性的属性?
In typescript is there a way to access the property of an interface property of type array?
我正在编写代码生成器,以根据数据结构的 JSON 定义生成打字稿。
我在访问接口内对象数组中的属性时遇到问题。
这是一个提出问题的示例界面:
interface SomeComplexThing {
propA: string
propB: number
propC: {
propCA: Array<{
propCA1: string
propCA2: number
}>
}
propD: SomeComplexThing['propC']['propCA']['propCA1'] // Error: Property 'propCA1' does not exist on type '{ propCA1: string; propCA2: number; }[]'
}
尝试访问 SomeComplexThing['propC']['propCA']['propCA1']
时出现错误:
Property 'propCA1' does not exist on type '{ propCA1: string; propCA2: number; }[]'
现在我知道我可以使用这样的数组索引访问 属性:
SomeComplexThing['propC']['propCA'][0]['propCA1']
甚至像这样:
SomeComplexThing['propC']['propCA'][1234]['propCA1']
无法访问此数组类型中的 属性 而不必通过某个任意数字引用它似乎很奇怪......生成代码时,我目前没有上下文知道 SomeComplexThing['propC']['propCA']
是一个数组类型,所以我不能在其中添加 [0]
因为该类型可能只是一个对象。
是否有另一种方法可以在 Typescript 中编写它,或者我可以使用某种实用函数来安全访问 属性 而无需使用数组索引引用?
正如您发现的那样,使用数字索引数组类型将使您获得项目类型。更通用的方法是使用 number
类型本身
进行索引
propD: SomeComplexThing['propC']['propCA'][number]['propCA1']
注意:使用特定数字与数字类型进行索引会对数组产生相同的结果,但可能会对元组产生不同的结果,元组的每个索引值都有不同的类型。这里按 number
索引将得到元组
中所有项目类型的联合
我正在编写代码生成器,以根据数据结构的 JSON 定义生成打字稿。 我在访问接口内对象数组中的属性时遇到问题。
这是一个提出问题的示例界面:
interface SomeComplexThing {
propA: string
propB: number
propC: {
propCA: Array<{
propCA1: string
propCA2: number
}>
}
propD: SomeComplexThing['propC']['propCA']['propCA1'] // Error: Property 'propCA1' does not exist on type '{ propCA1: string; propCA2: number; }[]'
}
尝试访问 SomeComplexThing['propC']['propCA']['propCA1']
时出现错误:
Property 'propCA1' does not exist on type '{ propCA1: string; propCA2: number; }[]'
现在我知道我可以使用这样的数组索引访问 属性:
SomeComplexThing['propC']['propCA'][0]['propCA1']
甚至像这样:
SomeComplexThing['propC']['propCA'][1234]['propCA1']
无法访问此数组类型中的 属性 而不必通过某个任意数字引用它似乎很奇怪......生成代码时,我目前没有上下文知道 SomeComplexThing['propC']['propCA']
是一个数组类型,所以我不能在其中添加 [0]
因为该类型可能只是一个对象。
是否有另一种方法可以在 Typescript 中编写它,或者我可以使用某种实用函数来安全访问 属性 而无需使用数组索引引用?
正如您发现的那样,使用数字索引数组类型将使您获得项目类型。更通用的方法是使用 number
类型本身
propD: SomeComplexThing['propC']['propCA'][number]['propCA1']
注意:使用特定数字与数字类型进行索引会对数组产生相同的结果,但可能会对元组产生不同的结果,元组的每个索引值都有不同的类型。这里按 number
索引将得到元组