繁体   English   中英

如何声明对象数组 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 定义中声明的值初始化属性CategoryACategoryB

或者您可以只创建一个类型为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM