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

为何TypeScript允许构建无效的Partial对象?

为什么buildPartialBad未触发TypeScript类型错误?

我们拆解两个版本的类型逻辑就能明白原因:

错误版本buildPartialBad的问题

在buildPartialBad里,参数类型是:

  • key: keyof A:允许传入'a'或'b'中的任意一个
  • val: A[keyof A]:这里的A[keyof A]是A所有属性值类型的联合类型,也就是number | string

TypeScript在这里只会做独立的类型检查:只要val是number或string就符合要求,不会把key的具体值和val的类型做关联匹配。所以当你传'a'(对应值类型应该是number)和'hello'(string属于联合类型成员)时,TypeScript认为参数符合类型定义,不会报错。

正确版本buildPartialGood的作用

泛型版本<K extends keyof A>的核心是绑定了键和值的具体类型关系:

  • 当你传入具体的key(比如'a'),TypeScript会把泛型K推断为该键的字面量类型'a'
  • 此时val: A[K]就被锁定为A['a']也就是number,传string类型的'hello'自然会触发类型不匹配的编译错误

这种泛型写法让TypeScript能追踪key和val的对应关系,确保每个键都传入正确类型的值。

内容的提问来源于stack exchange,提问作者f-g-p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:13