Tyfercript выводит тип без использования явной переменной типа для обратного вызова - PullRequest
0 голосов
/ 30 марта 2020

Я хочу обернуть rx js обратный вызов next подписчика с моей функцией:

type Handler<T> = (value: T) => void;

export function withTryCatch<T>(callback?: Handler<T>): Handler<T> {

  return (value: T) => {
    try {
      callback?.(value);
    } catch(err) {
      // error handling
    }
  };
}

Проблема с этим примером ниже состоит в том, что он не автоматически выводит тип из функции next подписчика. В этом примере тип user указан как unknown. Единственный способ сделать пользовательский желаемый тип - это явно установить переменную типа withTryCatch T (см. Прокомментированный код ниже - withTryCatch<UserModel>).

 store$
    .pipe(
      map(userSelector)
    )
    // .subscribe(withTryCatch<UserModel>((user) => {
    .subscribe(withTryCatch((user) => {
      // possible error code
    }));

Есть ли способ избежать использования withTryCatch<UserModel>

1 Ответ

2 голосов
/ 30 марта 2020

Эта проблема отделена от места, где вы используете с функцией TryCatch , в этом случае это rx js метод подписки . Когда вы просто вызываете его, параметр типа generi c T неизвестен. Когда вы вызываете его с каким-либо параметром типа, тогда, конечно, T . Вы можете использовать вывод Typescript, набрав user аргумент, как здесь:

withTryCatch((user: UserModel) => {

});

Вам необходимо передать обратный вызов непосредственно подписке , чтобы использовать вывод Typescript. К сожалению, это невозможно с такой функцией оболочки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...