我想为以下类型创建一个类型:
categories.categories[0].category.map((c: CategoryObject) => ({
category: c.name[0]._text[0],
是否可以声明索引0?喜欢:
type CategoryObject = { name[0]: { _text: [0] } };
答案 0 :(得分:0)
如果数组是同类的(即,其所有元素都具有相同的类型),则没有理由定义0
的类型。相反,您需要将CategoryObject定义为具有名为name
的数组元素的对象,并且该数组的元素具有本身就是数组(可能是字符串)的_text
元素。
此外,由于您没有为图元,联合或交集定义别名,因此别名为probably better to use an interface definition。
// Using arrays
interface TextContainer { _text: string[] }
interface CategoryObject { name: TextContainer[] }
或者内联:
// Using arrays
interface CategoryObject = { name: { _text: string[] }[] }
以上可能就是您想要的,因为您的数据源可能包含可变长度的同构数组;但是,如果您要坚持数组是固定长度的并且可能包含多种数据类型,则可以将其更改为tuple definition。 (内部一个元组表示为一个数组,但是TypeScript分别跟踪每个元素的类型。)
您可以通过将类型列出为好像它们是数组文字(在您的情况下只有一个元素)来做到这一点。请注意string[]
和[string]
之间的区别,如果您拥有[string, number, Foo]
之类的元素,则将更加重要:
// Using tuples
interface TextContainer { _text: [string] }
interface CategoryObject { name: [TextContainer] }
或者内联:
// Using tuples
interface CategoryObject = { name: [{ _text: [string] }] }