【问题标题】:Typescript infer type without using explicit type variable for callback打字稿推断类型而不使用显式类型变量进行回调
【发布时间】:2020-03-31 03:14:28
【问题描述】:

我想用我的函数包装 rxjs 订阅的 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&lt;UserModel&gt;)。

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

有什么办法可以避免使用withTryCatch&lt;UserModel&gt;

【问题讨论】:

    标签: typescript types


    【解决方案1】:

    此问题与您使用 withTryCatch 函数的地方分开,在这种情况下,它是 rxjs subscribe 方法。当您调用它时,通用 T 类型参数是未知的。当您使用某些类型参数调用它时,当然知道 T 。您可以通过键入 user 参数来使用 Typescript 推断,如下所示:

    withTryCatch((user: UserModel) => {
    
    });
    

    您需要将回调直接传递给 subscribe 以使用 Typescript 推断。不幸的是,这种包装函数是不可能的

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2018-06-09
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多