MyInterfaceOne [] |有什么区别? MyInterfaceTwo []`和`(MyInterfaceOne | MyInterfaceTwo)[]`

时间:2019-06-05 09:11:34

标签: typescript typescript-typings signature

使用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)[]时,它就起作用了。

有人可以向我解释这两者之间的区别吗?

1 个答案:

答案 0 :(得分:5)

MyInterfaceOne[] | MyInterfaceTwo[]

说它可以是仅MyInterfaceOne的数组,也可以是仅MyInterfaceTwo的数组。

(MyInterfaceOne|MyInterfaceTwo)[]

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