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;
  };
};