Typescript 从判别联合属性到对象类型的映射

Typescript 从判别联合属性到对象类型的映射,typescript,typescript-typings,Typescript,Typescript Typings,我有一堆物体,它们都有区别它们的属性。我把它们当作一种联合类型。现在我想创建一个从discriminated属性到实际类型的映射。我可以自己制作,但它很容易出现重复和错误,所以我想知道是否有某种方法可以用TypeScript以编程方式生成此脚本。:) type X={type:“X”,X:number} 类型Y={type:“Y”,Y:number} 类型值=X | Y 类型类型=值[“类型”] //有可能生成这个吗? 类型TypeToValue={ x:x, y:y, } //这对像这样的东西

我有一堆物体,它们都有区别它们的属性。我把它们当作一种联合类型。现在我想创建一个从discriminated属性到实际类型的映射。我可以自己制作,但它很容易出现重复和错误,所以我想知道是否有某种方法可以用TypeScript以编程方式生成此脚本。:)

type X={type:“X”,X:number}
类型Y={type:“Y”,Y:number}
类型值=X | Y
类型类型=值[“类型”]
//有可能生成这个吗?
类型TypeToValue={
x:x,
y:y,
}
//这对像这样的东西很有用
函数getRecord(type:T,id:string):TypeToValue[T]{
返回null作为任意值
}

如果签名始终与帖子中的签名相同,而
type
的值必须与关联属性匹配(例如
x
|
y
),则可以使用以下类型:

type TypeToValue<T extends Type> = { [P in T]: number } & { type: T }
TypeToValue={[P in T]:number}&{type:T}
可按如下方式使用:

declare function getRecord<T extends Type>(type: T, id: string): TypeToValue<T>

const { type, x } = getRecord('x', 'aa');
声明函数getRecord(type:T,id:string):TypeToValue
const{type,x}=getRecord('x','aa');
无法从与
type
参数匹配的联合类型中获取相应的类型

可能重复的
declare function getRecord<T extends Type>(type: T, id: string): TypeToValue<T>

const { type, x } = getRecord('x', 'aa');