以下代码段正确地推断出change$
的返回类型为Observable<'A' | 'B' | 'X' | 'Y'>
。
getChange$() {
return merge(
this.propertyA, // Observable<'A' | 'B'>
this.propertyB // Observable<'X' | 'Y'>
);
}
但是,我是否仍可以将返回类型指定为Observable
而无需知道propertyA
和propertyB
的类型参数?
我可以指定类型为Observable
,但让TypeScript仍然推断类型参数吗?
getChange$(): Observable<?>
或者我可以从属性中获取类型并将其合并吗?
getChange$(): Observable<genericTypeOf(propertyA) | genericTypeOf(propertyB)>
答案 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
);
}
}