打字稿数组减少 async/await 显示类型不匹配错误

Typescript array reduce with async/await showing type mismatch error

使用 async/await.reduce()

似乎有一些类型问题

我必须使用正确的类型在 reduce 中调用一个异步函数,但我不明白为什么有人请帮助我

interface Person {
  name: string;
  age: number;
}

const persons: Person[] = [
  { name: 'John', age: 30 },
  { name: 'Alice', age: 45 },
];

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

const ageByPerson: Person[] = persons.reduce<Person[]>(
  async (result, person) => {
    await sleep(4000);
    return result.concat({
      age: person.age,
      name: person.name,
    });
  },
  []
);
console.log('age ', ageByPerson);

没有界面可以正常工作但是当我使用界面时我无法弄清楚

由于回调是异步的,它总是return一个Promise;类型参数不应为 Person[],而应为 Promise<Person[]>。还需要传入这样一个值作为初始值,等待前面的累加器解析完再进行concating。

const ageByPersonPromise = persons.reduce<Promise<Person[]>>(
    async (resultPromise, person) => {
        const result = await resultPromise;
        await sleep(4000);
        return result.concat({
            age: person.age,
            name: person.name,
        });
    },
    Promise.resolve([])
);
ageByPersonPromise
    .then((ageByPerson) => {
        console.log('age ', ageByPerson);
    });