TypeScript在不匹配的返回值上没有错误

时间:2017-05-14 22:23:13

标签: typescript

为什么TypeScript没有抱怨这个?

async GetCategoriesBySet(set: Set): Promise<Result<Array<ProductCategory>>> {
  let categories: Array<ProductCategory> = []

  if (!set.theme || !set.subtheme || !set.title) {
    return Promise.resolve(new Result<Array<ProductCategory>>({res: null, err: "Set data is not valid"}))
  }

categories.push(await this.GetCategory(set.theme, {parent: (await this.GetCategory('Themes')).id}))

  return categories
}

返回值categories的类型为Array<ProductCategory>,而不是Promise,甚至是包装Result类。那么为什么我很高兴让我犯这个错误呢? (有没有办法让它抱怨?)

提前致谢

2 个答案:

答案 0 :(得分:3)

  

返回值categories是Array类型,而不是Promise,

所有async个函数都返回Promise。这是JavaScript规范的一部分。如果你返回一个常量,它基本上是Promise.resolve

答案 1 :(得分:0)

当您的函数声明Promise<Result<Array<ProductCategory>>>返回类型时,您可以返回Result<Array<ProductCategory>>类型的值。

如果我有以下声明:

interface Result<T> {
    result: T;
}

我从TypeScript编译器收到错误:

Property 'result' is missing in type 'ProductCategory[]'.

您对Result的定义是什么?