我尝试在typescript中定义一个类型安全的nodejs样式的回调。我希望将err
定义为Error
(如果存在)或data
定义为T
(如果不存在)。
1.如果我用这个代码
export interface SafeCallback<T> {
(err: unknown): void;
(err: undefined, data: T): void;
}
const subscribe = <T>(callback: SafeCallback<T>) => {
let result: T;
try {
// result = something
} catch (e) {
callback(e);
return;
}
callback(undefined, result);
};
subscribe<{id: string}>((err, data?) => {
if (!err) {
console.log(data.id);
}
});
我得到'data' is of type 'unknown'.
1.如果去掉data
中的问号,则得到Argument of type '(err: undefined, data: { id: string; }) => void' is not assignable to parameter of type 'SafeCallback<{ id: string; }>'
我尝试了在第一个重载中定义err: Error
的两种情况,但没有任何改变。
还有什么我该试试的吗?
谢谢你!
1条答案
按热度按时间knpiaxh11#
有条件的类型可能是什么
编辑:刚刚看到@jclaz的回复。从他的回复中得到一些东西:
从而防止在捕获时发生投错。