Javascript TypeScript:如何正确地键入接受承诺并按原样返回该承诺的函数
我有一个名为Javascript TypeScript:如何正确地键入接受承诺并按原样返回该承诺的函数,javascript,typescript,promise,Javascript,Typescript,Promise,我有一个名为prepareOnTick的函数,它返回一个函数,该函数接受承诺并在承诺的中添加一些逻辑,然后捕获最后回调 const prepareOnTick = (onPerItemSettle: OnPerItemSettle) => { return (promise: Promise<any>) => { promise .then( () => { onPerItemSettle.onSucces
prepareOnTick
的函数,它返回一个函数,该函数接受承诺并在承诺的中添加一些逻辑,然后
捕获
最后
回调
const prepareOnTick = (onPerItemSettle: OnPerItemSettle) => {
return (promise: Promise<any>) => {
promise
.then(
() => {
onPerItemSettle.onSuccess?.();
},
() => {
onPerItemSettle.onError?.();
}
)
.finally(() => {
onPerItemSettle.onSettled?.();
});
return promise;
};
};
const onTick = prepareOnTick({...})
但TS编译器显然不喜欢我的类型注释,所以我一定是做错了什么。
这是有人能看一下吗?您忘记在泛型参数后添加额外的逗号,这里:
return
const prepareOnTick=(onperitemsollect:onperitemsollect)=>{
//TS编译器不喜欢,他喜欢更多或是因为
//JSX:D
回报(承诺:承诺):承诺=>{
承诺
.那么(
() => {
onPermitemSettle.onSuccess?();
},
() => {
onperitempsolite.onError?();
}
)
.最后(()=>{
OnPeritemSettled.onSettled?();
});
回报承诺;
};
};
你应该看看这个这是一件很奇怪的事情;在没有终端错误处理和链接的情况下形成私有分支。
const prepareOnTick = (onPerItemSettle: OnPerItemSettle) => {
return <T>(promise: Promise<T>): Promise<T>=> {
promise
.then(
() => {
onPerItemSettle.onSuccess?.();
},
() => {
onPerItemSettle.onError?.();
}
)
.finally(() => {
onPerItemSettle.onSettled?.();
});
return promise;
};
};