TypeScript:错误TS2322:类型“ {}”不可分配给类型“ ...”

vma*_*uet 1 typescript

我有一个界面:

export default interface ValidationResult {
  valid: boolean
  errors?: string[]
}
Run Code Online (Sandbox Code Playgroud)

还有一个返回实现该接口的对象的函数:

  static validateTitle(title: string): ValidationResult {
    if (title == null || title === '')
      return {valid: false, errors: ["Title can't be empty."]}

    return {valid: true}
  }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在另一个函数中使用第一个函数时:

static async validateMovie(title: string): Promise<ValidationResult> {
    const result = this.validateTitle(title)
    if (result.valid === false)
      return new Promise((resolve, reject) => { resolve(result) })
    // other validations...
}
Run Code Online (Sandbox Code Playgroud)

我收到TypeScript错误:

error TS2322: Type '{}' is not assignable to type 'ValidationResult'.
  Property 'valid' is missing in type '{}'.

25       return new Promise((resolve, reject) => { resolve(result) })
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我尝试在as ValidationResult任何地方进行投射,但没有成功。怎么了?我不明白TypeScript在抱怨什么。

zer*_*kms 5

鉴于您的功能已经是async您所需要的return result;

或者,您可以return new Promise<ValidationResult>

Typescript尚未推断诺言的类型,这是一个已知问题:https : //github.com/Microsoft/TypeScript/issues/5254