![](/img/trans.png)
[英]How to declare an object with nested array of objects in TypeScript?
[英]How to declare an array of objects typescript
我很抱歉标题措辞不正确,我对编程很陌生。
我有一个 object,对于这个例子,可以说它如下
export default interface Person {
name: string;
age: number;
}
我想要一个预设的“人”数组,我自己定义值。 我正在尝试这种方式,但是我无法完全正确地使用语法(或者我可能会以完全错误的方式进行操作)
import Minion from './Minion';
export default interface DefinedPeople {
CategoryA: Person[
{
name: "Dave",
age: 42
},
{
type: "SomePerson",
age: 50
}],
CategoryB: Person[
{
name: "Bob",
age: 23
}]
}
我知道这可能看起来过于复杂,但是对于我正在尝试做的事情是必要的。
最后我希望能够拥有例如; DefinedPeople.CategoryA[0].name
为“Dave”
正如@VLAZ 所指出的,接口不能被实例化,它们只是为实现它们的 class 规定了一个“形状”。 因此,在您的示例中DefinedPeople.CategoryA[0].name
没有意义,因为您无法访问接口(不是对象)上的属性CategoryA
。
出于同样的原因,您不能像在DefinedPeople
中那样使用Person
接口来初始化实例变量。
为了得到你想要的,你的DefinedPeople
界面应该是这样的:
export default interface DefinedPeople {
CategoryA: Person[]
CategoryB: Person[]
}
然后您可以定义一个实现DefinedPeople
的 class 并从该 class 创建一个 object:
export default class SomeClassWithDefinedPeople implements DefinedPeople {
CategoryA = [
{
name: "Dave",
age: 42
},
{
type: "SomePerson",
age: 50
}],
CategoryB = [
{
name: "Bob",
age: 23
}]
}
const instance = new SomeClassWithDefinedPeople();
instance.CategoryA[0].name
请注意,在这种情况下, SomeClassWithDefinedPeople
的每个新实例都将使用 class 定义中声明的值初始化属性CategoryA
和CategoryB
。
或者您可以只创建一个类型为 DefinedPeople 的DefinedPeople
:
const instance: DefinedPeople = {
CategoryA: [
{
name: "Dave",
age: 42
},
{
type: "SomePerson",
age: 50
}],
CategoryB: [
{
name: "Bob",
age: 23
}]
}
instance.CategoryA[0].name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.