typescript - 带有打字稿泛型的显式值类型约束?
问题描述
我有这个功能:
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[] {
推荐阅读
- docker - 如何限制 docker 容器只监听来自 localhost 的连接?
- sql - 如何根据 30 分钟的时间间隔检索时间戳列的最小和最大时间?
- ios - swift deinit方法没有调用
- azure - Powershell AzureADPreview cmdlet Set-AzureADApplication“PreAuthorizedApplications”参数的正确语法是什么?
- shell - 当 Shell 脚本实际失败时,Jenkins 总是 SUCCESS 状态
- java - 匹配方法未返回 true
- java - 组合 .java 文件并将它们作为 java 代码中的可执行 jar 导出
- mysql - 一个 mysql 函数,它捕获错误并提示是否继续以 shell 脚本形式的查询中的每一行?
- xamarin.forms - 如何防止软键盘显示在条目焦点上 - xamarin 表单 UWP
- npm - 低严重性漏洞;大括号包的“正则表达式拒绝服务”