如何在TypeScript中为对象属性定义基于另一个属性值的类型约束?

type Foo = {
  type: 'string' | 'number',
  value: string | number
}

比方上面的类型,如果我想要 value 的类型在type'string' 时为 string ,在 type'number' 的时候为 number

要怎么定义这两个属性之间的类型约束?

阅读 803
2 个回答
✓ 已被采纳
type TMap = {
  string: string,
  number: number,
}

type Foo<K extends keyof TMap> = {
  type: K,
  value: TMap[K],
}

或者简单一点:

type Foo = {
  type: 'string',
  value: string
} | {
  type: 'number',
  value: number
}

最简洁的方式是使用 TypeScript 的条件类型(也称为分发条件类型或泛型条件类型)来定义一个新的类型。

你可以看看这篇文章:https://mybj123.com/23000.html

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏