您的实现似乎很好, void 的问题是该参数仍然是预期的。你可以用undefined
const PromiseOK = <T>(val: T): Promise<T> => {
return Promise.resolve(val);
};
PromiseOK<void>(undefined)
更好的选择可能是使用重载来获得 void 的特殊行为:
function PromiseOK(): Promise<void>
function PromiseOK<T>(val: T): Promise<T>
function PromiseOK<T>(val?: T): Promise<T> {
return Promise.resolve(val);
};
PromiseOK() // Promise<void>
PromiseOK(1) //Promise<number>
箭头函数可以重载,但语法并不完全漂亮:
const PromiseOK: {
(): Promise<void>
<T>(val: T): Promise<T>
} = <T>(val?: T): Promise<T> => Promise.resolve(val);
PromiseOK() // Promise<void>
PromiseOK(1) //Promise<number>