You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript泛型约束为何必须使用extends关键字?

关于TypeScript泛型函数getProp的类型声明疑问解答
  • 首先是语法层面的硬性要求:TypeScript的泛型参数声明有固定规则,泛型参数名后面如果要指定类型约束,必须用extends关键字。你写的K keyof T本身就是非法语法——编译器根本无法识别这个写法,会直接抛出语法错误。extends是TypeScript专门用来定义泛型参数“类型边界”的关键字,没有它,就没法把K限定在keyof T这个合法键的集合里。

  • 其次是类型安全的必要性:如果不用K extends keyof T,K会被当成不受约束的泛型参数,意味着你可以传入任何类型的key,哪怕这个key根本不是obj的属性。比如调用getProp({name: '张三'}, 'age'),无约束的情况下编译器不会报错,但运行时肯定拿不到正确的值,这就失去了TypeScript类型检查的核心意义。加上extends后,编译器会强制要求key必须是obj的有效键,从根源上避免这类错误。

  • 最后是类型推导的精确性:当你调用getProp时,TypeScript需要自动推导T和K的类型关系。如果K没有约束为keyof T,编译器没法把K和T的键关联起来,可能会把K推导成更宽泛的类型(比如string),此时返回值T[K]会变成unknown或者所有属性类型的联合类型,完全达不到“精确获取对应属性类型”的泛型设计目的。用extends约束后,编译器能精准推导K是T的某个具体键,返回值类型也会和该键的类型完全匹配。

内容的提问来源于stack exchange,提问作者Mg Gm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 20:32:31