如何将数组联合设置为函数返回类型

时间:2019-08-22 15:30:51

标签: typescript

我有接受数组联合的函数参数,例如:(ClassA|ClassB)[]
如何从函数ClassA[]ClassB[]返回?

当我尝试返回类型(ClassA|ClassB)[]时,出现以下错误:

  

已分配的表达式类型(ClassA|ClassB)[]不能分配给类型ClassA[]

classA: ClassA[];
classB: ClassB[];

this.classA = this.function(this.classA, classAObject);
this.classB = this.function(this.classB, classBObject);

function(array: (ClassA|ClassB)[], item: ClassA|ClassB): any {
   // some code...
   return array;
}

2 个答案:

答案 0 :(得分:1)

array: ClassA[]|ClassB[]

如果是ClassA数组或ClassB数组,请像这样输入。不是可能是ClassA或ClassB的项目数组

答案 1 :(得分:0)

函数重载可以为您提供所需的类型签名:

class A {
  a() {}
}
class B {
  b() {}
}

const a = new A();
const b = new B();

const arrayOfA: A[] = [];
const arrayOfB: B[] = [];

function doSomething(array: A[], item: A): A[];
function doSomething(array: B[], item: B): B[];
function doSomething(array: A[] | B[],item: A | B): A[] | B[] {
  return array;
}

const resultOfA = doSomething(arrayOfA, a);
const resultOfB = doSomething(arrayOfB, b);

您可以检查resultOfA的类型分别为A[]resultOfB的类型B[]