タイトルの通りです。特に補足はありません。
Promiseに指定した型を、二重指定したくなくて作りました。
type KeyType<T, K extends keyof T> = T[K];
export type FullFilledParams<PROMISE extends Promise<any>> = KeyType<Parameters<Extract<KeyType<Parameters<KeyType<Pick<PROMISE, 'then'>, 'then'>>, 0>, Function>>, 0>;
export type RejectedParams<PROMISE extends Promise<any>> = KeyType<Parameters<Extract<KeyType<Parameters<KeyType<Pick<PROMISE, 'then'>, 'then'>>, 1>, Function>>, 0>;
// 使い方
const promise = new Promise<number>((r) => r(0));
type F = FullFilledParams<typeof promise>;
type R = RejectedParams<typeof promise>;
promise.then((v: F) => { }, (e: R) => { });