TypeScript如何将对象数组转换为具体模型?

时间:2019-09-07 16:03:51

标签: typescript

下面有一个简单的示例,我想将对象数组转换为动物对象数组,但在Type 'Animal[]' is missing the following properties from type 'Promise<Animal[]>': then, catch, [Symbol.toStringTag]函数中遇到此错误Controller.getPersons()。我不太确定是什么导致了此错误。

class Animal {
  name: string;
  colour: string;

  constructor(name: string, colour: string) {
    this.name = name;
    this.colour = colour;
  }
}

我拥有此函数的类,该函数承诺返回动物对象数组getPersons(): Promise<Animal[]>

class Controller {
  data: { name: string; colour: string }[];

  constructor(data: { name: string; colour: string }[]) {
    this.data = data;
  }

  getPersons(): Promise<Animal[]> {
    const animals = this.data.map(a => new Animal(a.name, a.colour));
    console.log("animals -----> ", animals);
    console.log("type -----> ", typeof animals);
    return animals;
  }

这是我想要转换为动物对象数组的示例数据

const data = [
   { name: "Dog", colour: "Black" },
   { name: "Cat", colour: "White" }
];

const c = new Controller(data);
c.getPersons();

我将不胜感激。预先谢谢你。

1 个答案:

答案 0 :(得分:1)

您的方法getPersons()的返回类型为Promise<Animal[]>。但是,您实际上返回的只是一系列动物。

正如@ttugates在评论中指出的那样,您有两个选择:

更改退货类型

将方法的返回类型更改为Animal[]以匹配实现:

getPersons(): Animal[] {
    // ...
}

更改实现

如果您确实需要一个承诺(可能符合某个接口),请创建一个并返回:

getPersons(): Promise<Animal[]> {
    const animals = this.data.map(a => new Animal(a.name, a.colour));
    console.log("animals -----> ", animals);
    console.log("type -----> ", typeof animals);
    return Promise.resolve(animals);
}