类型属性的Delcare索引0

时间:2019-06-20 17:22:22

标签: typescript

我想为以下类型创建一个类型:

categories.categories[0].category.map((c: CategoryObject) => ({
    category: c.name[0]._text[0],

是否可以声明索引0?喜欢:

type CategoryObject = { name[0]: { _text: [0] } };

1 个答案:

答案 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] }] }