下面有一个简单的示例,我想将对象数组转换为动物对象数组,但在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();
我将不胜感激。预先谢谢你。
答案 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);
}