我有这个功能:
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
或IExam
。
答案 0 :(得分:1)
将类型参数限制为IPost | IExam
类型。
function filterByCourseNumber<T extends IPost | IExam>(data: T[], courses: string[]): T[] {