如何将TS类型声明为具有属性的对象数组,该属性具有类型为number或string的值?

时间:2020-01-05 15:46:18

标签: typescript

我对组件的输入是这样声明的。

@Input() rows: (string | number)[][];

我知道这是一个闪灯(例如,stringnumber)的数组。因此,数据是一个二维矩阵,带有闪烁器(浮点数,但在我看来不是)。

意识到不是每一行都有相同的元素计数,所以我不得不将矩阵重新整理成字典,即对象数组(其中对象具有我们一无所知的属性,只不过这些对象是闪烁灯) 。这是我的最佳尝试。

@Input() rows: { [key: string]: (string | number) }[];

虽然计算机似乎接受它,但我担心两件事。第一个是语法错误,而且由于测试不佳,我只是不知道这个问题。第二个原因是,无论正确性如何,我都创造了一个残酷的谜团,任何人都不应该看到(即,存在一种表达同一数据结构的完美方法)。

与建议的类型相比,如何以一种更好的方式声明上述类型?

2 个答案:

答案 0 :(得分:3)

在我看来,这是有效的TypeScript。如果您是我,我将清理类型,以便声明一个可以在其他组件中重用的接口(如果决定进一步传递它,则父级(可能是输入的源)或子级(可能是子级)? )。

export interface Row {
  [key: string]: string | number;
}

然后,在组件本身内,您可以导入接口并使用它来声明输入类型。

@Input() rows: Row[];

@aleksayl。建议的另一种方法是像这样从TS应用默认的GP类型。

Record<string, string | number>[]

答案 1 :(得分:-1)

您的代码非常好,不用担心。但是,将模型移入接口是一个好主意,例如:

interface Row {
  [key: string]: string | number;
}

请注意:如果您的编译器/编译器将其视为有效的Typescript,那么语法就不能“简单地出错”-但这并不总是意味着没有更好的方法。