从两个泛型类型参数创建联合

时间:2018-12-19 16:02:15

标签: typescript type-inference

以下代码段正确地推断出change$的返回类型为Observable<'A' | 'B' | 'X' | 'Y'>

getChange$() {
  return merge(
    this.propertyA, // Observable<'A' | 'B'>
    this.propertyB  // Observable<'X' | 'Y'>
  );
}

但是,我是否仍可以将返回类型指定为Observable 而无需知道propertyApropertyB的类型参数

我可以指定类型为Observable,但让TypeScript仍然推断类型参数吗?

getChange$(): Observable<?>

或者我可以从属性中获取类型并将其合并吗?

getChange$(): Observable<genericTypeOf(propertyA) | genericTypeOf(propertyB)>

1 个答案:

答案 0 :(得分:2)

通常在方法this中隐式定义参数,但是您也可以显式定义它,这将允许您从属性中提取必要的类型参数。

class Foo {
    propertyA: Observable<'A' | 'B'> = null as any;
    propertyB: Observable<'X' | 'Y'> = null as any;
    getChange$<T, U>(this: { propertyA: Observable<T>, propertyB: Observable<U> }): Observable<T | U> {
        return merge(
            this.propertyA,
            this.propertyB
        );
    }
}