我有这个功能:
function filterByCourseNumber(data: IPost[] | IExam[], courses: string[]) {
if (courses.length === 0) return data;
return data.filter((item) => _includes(courses, item.courseNumber));
}
当我通过时它工作正常IPost[]
,但是当我这样做时:
exams = filterByCourseNumber(exams, filters.courses)
我有这个错误:
Type 'IPost[]' is not assignable to type 'IExam[]'.
Type 'IPost' is not assignable to type 'IExam'.
Types of property 'claimer' are incompatible.
Type 'string | undefined' is not assignable to type 'string'.
Type 'undefined' is not assignable to type 'string'.ts(2322)
let exams: IExam[]
我知道我需要使用泛型,但是我不知道如何编写接口。
我试过了:
function filterByCourseNumber<T>(data: T[], courses: string[]): T[] {
if (courses.length === 0) return data;
return data.filter((item) => _includes(courses, item.courseNumber));
}
但是item.courseNumber
有错误:
Property 'courseNumber' does not exist on type 'T'.
我想我已经接近了,但是我不确定如何让我的函数知道T
只能是IPost
or IExam
。
将您的类型参数限制为IPost | IExam
仅类型。
function filterByCourseNumber<T extends IPost | IExam>(data: T[], courses: string[]): T[] {
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句