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