Создать объединение из двух параметров общего типа - PullRequest
0 голосов
/ 19 декабря 2018

Следующий фрагмент правильно выводит тип возврата 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)>

1 Ответ

0 голосов
/ 19 декабря 2018

Обычно в методах 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
        );
    }
}
...