解析参数的返回类型是否推断为对象?

时间:2018-08-31 05:22:41

标签: typescript

以下内容无法编译:

function P() {
   return new Promise((resolve, reject) => {
      const stringValue:string = "...explicit string...";
      resolve(stringValue);
   });
}

async function f() {
  let s:string = "";
  await P().then((res) => { s = res; });
}

错误出现在语句s = res

  

[ts]类型“ {}”不能分配给类型“字符串”。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

您必须明确指定返回类型。

function P(): Promise<string> {
   return new Promise((resolve, reject) => {
      const stringValue:string = "...explicit string...";
      resolve(stringValue);
   });
}

async function f() {
  let s:string = "";
  await P().then((res) => { s = res; });
}

当您不指定返回类型时,TypeScript假定P的返回类型为Promise<{}>。您可以在https://www.typescriptlang.org/play/index.html处进行检查,在左侧键入代码,然后将鼠标放在P().then(上,您会看到打字稿假定返回类型为Promise<{}>