如何对 then() 的参数进行类型检查

How to typecheck arguments to then()

在下面的函数中,Promise 解析为 1,因此 typeof astring === 'number'。但是,对于 strictFunctionTypes,我没有收到 numberastring: string 冲突的警告,而是看到 Type '{}' is not assignable to type 'string'.

如何改进提供给 then() 的函数的类型检查?

function test(): Promise<string> {
  return new Promise((resolve, reject) => {
    resolve(1);
  })
  .then((astring: string) => {
    return 'string';
  })
}

您需要将类型参数指定为Promise,Typescript 不会根据resolve 的用法推断return promise 的类型将是number:

function test(): Promise<string> {
    return new Promise<number>((resolve, reject) => {
        resolve(1);
    })
    .then((nr: number) => {
        return 'string';
    })
}

//error
function test2(): Promise<string> {
    return new Promise<number>((resolve, reject) => {
        resolve(1);
    })
    .then((nr: string) => {
        return 'string';
    })
}