打字稿一般承诺退回类型

Pla*_*tic 3 generics promise typescript typescript-generics

基本上,我正在尝试实现一个函数,该函数始终返回与参数相同的“类型”的实现承诺

因此,如果我使用布尔值进行调用,它将返回一个已实现的Promise,如果我使用一个字符串参数进行调用,它将返回一个已实现的Promise,依此类推。

到目前为止我尝试过的是:

const PromiseOK = <T>(val: T): Promise<T> => {
    return Promise.resolve(val);
};
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是正确的方法,在任何情况下,如果我尝试获得Promise <void>,它都会中断

任何建议将不胜感激

Tit*_*mir 5

您的实现似乎很好,void的问题是仍然需要参数。你可以用undefined

const PromiseOK = <T>(val: T): Promise<T> => {
    return Promise.resolve(val);
};

PromiseOK<void>(undefined)
Run Code Online (Sandbox Code Playgroud)

更好的选择可能是使用重载来获取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>
Run Code Online (Sandbox Code Playgroud)

箭头函数可能有重载,但语法并不完全正确:

const PromiseOK: {
    (): Promise<void>
    <T>(val: T): Promise<T>
} = <T>(val?: T): Promise<T> => Promise.resolve(val);

PromiseOK() // Promise<void>
PromiseOK(1) //Promise<number>
Run Code Online (Sandbox Code Playgroud)