如何在TypeScript中为带预定义键值的泛型函数定义类型
方案1:最简实现(满足绝大多数场景)
直接约束入参结构即可,TS 结构化类型系统天然支持「只要包含指定属性就可以传入」的特性,不需要额外写泛型,也不用修改原有调用逻辑:
const current = (d: { currentYear: number }): number => d.currentYear;
调用示例:
// 任意包含 currentYear: number 的对象都可以正常传入,其余属性不受限制 current({ currentYear: 2024, department: "tech", count: 100 }); // 返回 2024 // 缺少 currentYear 或者类型不匹配时,TS 会直接在编译阶段报错 current({ year: 2024 }); // 触发类型错误提示
方案2:泛型实现(保留更精确的类型信息)
如果你需要保留currentYear的字面量类型(比如入参的currentYear是常量值,需要返回值也对应字面量而非宽泛的number类型),可以用泛型约束实现:
const current = <T extends { currentYear: number }>(d: T): T["currentYear"] => d.currentYear; // 示例:返回值类型为字面量 2024 而非 number const year = current({ currentYear: 2024 as const });
可选适配场景
如果传入的对象可能不存在currentYear属性,调整类型约束为可选即可:
// 返回值对应为 number | undefined const current = (d: { currentYear?: number }): number | undefined => d.currentYear;
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

