Typescript@4.0.0rc9
在打字脚本编写定义中,用于手工编写的函数。当最终返回值为非promise时,它们可以工作,但当返回值为promise时,它们会失败。例如,这是可行的:
function test (
a: number,
): (
b: number,
) => number
function test (
a: number,
b: number,
): number
function test (a, b?) {
if (b === undefined)
return function (b: number) { test(a, b) }
return a + b
}虽然这样做失败了:
function asynctest (
a: number,
): (
b: number,
) => Promise<number>
function asynctest (
a: number,
b: number,
): Promise<number>
async function asynctest (a, b?) {
if (b === undefined)
return function (b: number) { return asynctest(a, b) }
return await a + b
}VSCode的内置类型检查器表明,当提供1个参数时,asynctest返回的类型如预期的那样为(b: number) => Promise<number>。
发布于 2018-01-27 12:51:14
在写这个问题的过程中,我解决了它。
异步函数必须返回promise,因此在传递一个参数的情况下,它返回的不是函数,而是函数的Promise。因此,正确的异步等待版本是:
function asynctest (
a: number,
): Promise<(
b: number,
) => Promise<number>>
function asynctest (
a: number,
b: number,
): Promise<number>
async function asynctest (a, b?) {
if (arguments.length === 1)
return function (b: number) { return asynctest(a, b) }
return await a + b
}另一种版本是直接使用promises,而不是使用async-await (我认为这更简洁):
function promisetest (
a: number,
): (
b: number,
) => Promise<number>
function promisetest (
a: number,
b: number,
): Promise<number>
function promisetest (a, b?) {
if (arguments.length === 1)
return function (b: number) { return promisetest(a, b) }
return new Promise(a + b)
}https://stackoverflow.com/questions/48472708
复制相似问题