Typescript推断类型而不使用显式类型变量进行回调

时间:2020-03-30 10:18:40

标签: typescript types

我想用我的函数包装rxjs订阅的127.0.0.2 hujjaj.dev 回调:

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类型变量T(请参见下面的注释代码-withTryCatch)。

withTryCatch<UserModel>

有什么方法可以避免使用 store$ .pipe( map(userSelector) ) // .subscribe(withTryCatch<UserModel>((user) => { .subscribe(withTryCatch((user) => { // possible error code }));

1 个答案:

答案 0 :(得分:2)

此问题与您使用 withTryCatch 函数的位置分开,在这种情况下,它是rxjs subscribe 方法。当您仅调用它时,通用的 T 类型参数是未知的。当您使用某种类型参数调用它时, T 当然是已知的。您可以通过输入 user 这样的参数来使用Typescript推断:

withTryCatch((user: UserModel) => {

});

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