我想用我的函数包装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
}));
?
答案 0 :(得分:2)
此问题与您使用 withTryCatch 函数的位置分开,在这种情况下,它是rxjs subscribe 方法。当您仅调用它时,通用的 T 类型参数是未知的。当您使用某种类型参数调用它时, T 当然是已知的。您可以通过输入 user 这样的参数来使用Typescript推断:
withTryCatch((user: UserModel) => {
});
您需要将回调直接传递给订阅才能使用Typescript推断。不幸的是,使用这种包装函数是不可能的