当使用MyInterfaceOne[] | MyInterfaceTwo[]时,我的代码中的另一个地方出现了typescript错误,这对我来说没有意义。

myInterfaces = funcWithAboveSignature()

return myInterfaces.reduce(async (acc, interfaceType) => {
    await acc;
    if (interfaceType.prop) {
      return await someAsyncFunc(interfaceType);
    } else {
      return await someOtherAsyncFunc(interfaceType);
    }
  }, Promise.resolve());

错误显示:
Argument of type '(acc: MyInterfaceOne, raw: MyInterfaceOne) => Promise<void>' is not assignable to parameter of type '(previousValue: MyInterfaceOne, currentValue: MyInterfaceOne, currentIndex: number, array: MyInterfaceOne[]) => MyInterfaceOne'.
但是当将函数签名从MyInterfaceOne[] | MyInterfaceTwo[]更改为(MyInterfaceOne|MyInterfaceTwo)[]时,它仍在工作。
有人能给我解释一下这两者的区别吗?

最佳答案

MyInterfaceOne[] | MyInterfaceTwo[]

它可以是一个只有myinterfaceOne的数组,也可以是一个只有myinterfacetwo的数组。
(MyInterfaceOne|MyInterfaceTwo)[]

说它可以是myinterfaceone或myinterfacetwo的数组,因此它可以包含这两种类型中的任何一种元素。

09-25 19:04