Typescript,如何从另一个属性值推断类型?

Typescript,如何从另一个属性值推断类型?,typescript,Typescript,例如,我有一个带有属性的接口:key和value,我想通过键推断值类型 接口对象{a:number;b:string} 接口参数{ 关键字:K value:Obj[K]//我想推断这个类型 } 常数p:Param={ 键:“a”, 值:“”,//typescript无法推断此类型,应为数字 } 我该怎么做呢?Obj[K]是指可以通过索引Obj通过K中的任何值获得的值,而不仅仅是键 因此,要使用此结构,您需要指定哪个键使用得更紧密: interface Obj { a: number; b: s

例如,我有一个带有属性的接口:
key
value
,我想通过键推断值类型

接口对象{a:number;b:string}
接口参数{
关键字:K
value:Obj[K]//我想推断这个类型
}
常数p:Param={
键:“a”,
值:“”,//typescript无法推断此类型,应为数字
}

我该怎么做呢?

Obj[K]
是指可以通过索引
Obj
通过
K
中的任何值获得的值,而不仅仅是

因此,要使用此结构,您需要指定哪个键使用得更紧密:

interface Obj { a: number; b: string }

interface Param<K extends keyof Obj> {
  key: K
  value: Obj[K]
}

const p: Param<'a'> = { // changed line
  key: 'a',
  value: '', // error
}
如果您需要变量
p
能够保持
,但仍然保持
为正确类型,则这是唯一有效的方法

interface AParam {
    key: 'a'
    value: number
}

interface BParam {
    key: 'b'
    value: string
}

type Param = AParam | BParam;

const p: Param = {
  key: 'a',
  value: '', // error
}