这个是设计如此吧,毕竟你确实可能不知道会 catch 到什么错误 不过好像可以包装一个确定错误类型的 `PromiseE` type Nullable = T | null | undefined type MaybePromiseLike = T | PromiseLike class PromiseE extends Promise { constructor(executor: (resolve: (value: T | PromiseLike) => void, reject: (reason?: E) => void) => void) { super(executor) } catch(onrejected?: ((reason: E) => R | PromiseLike) | undefined | null): Promise { return super.catch(onrejected) } } const p = new PromiseE((res, rej) => { res(1) // @ts-expect-error rej(2) rej('3') }) p.catch(err => { err // err: string })