typescript 中可以通过 infer 解构出 union 对象中指定的某个值的部分类型吗?

作者站长头像
站长
· 阅读数 13

如下的 example,我期望可以通过 NewData 这个类型根据 key 取出原始 Data 中对应的值的类型,但是得到的是 never,这是 typescript 的问题吗,可以有其他的办法实现期待的功能吗,求解

https://www.typescriptlang.org/play/?ts=5.6.0-beta#code/C4TwD...

回复
1个回答
avatar
test
2024-08-11
type Data =
  | {
      key: 'a'
      value: string
    }
  | {
      key: 'b'
      value: number
    }

type NewData<T extends Data["key"]> = {
    newKey: T,
    value: Extract<Data, { key: T }>['value']
}

type ExpectValueNumber = NewData<"b">["value"] // number
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容