TypeScript: خطا TS2322: نوع '{}' قابل انتساب به نوع '...' نیست


من یک اینترفیس دارم:

export default interface ValidationResult {
  valid: boolean
  errors?: string[]
}

و یک تابع که یک شیء پیادهسازیکنندهی آن رابط را برمیگرداند:

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

    return {valid: true}
  }

اما وقتی سعی میکنم از اولین تابع داخل یک تابع دیگر استفاده کنم:

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...
}

من یک خطای TypeScript دریافت میکنم:

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

25       return new Promise((resolve, reject) => { resolve(result) })
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

من سعی کردم در همه جا با as ValidationResult تبدیل کنم اما موفق نشدم. مشکل چیست؟ من نمیفهمم TypeScript درباره چه چیزی شکایت میکند.

پاسخ شماره ۱

با توجه به اینکه تابع شما در حال حاضر async است، فقط نیاز دارید که return result; را انجام دهید.

به طور متناوب میتوانید return new Promise<ValidationResult> را استفاده کنید.

تایپاسکریپت هنوز نوعها را برای پرامیسها استنتاج نمیکند، و این یک مشکل شناختهشده است: https://github.com/Microsoft/TypeScript/issues/5254