You need to enable JavaScript to run this app. 如何在TypeScript中为带预定义键值的泛型函数定义类型
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 03:06:03