【发布时间】:2021-07-09 17:45:38
【问题描述】:
我想创建一种类型,该类型采用具有值的可索引对象的类型 (例如这个:)
const ENUMLIKE_WITH_METADATA = {
a: {
position: 1,
value: 'str',
},
b: {
position: 2,
value: 'ng',
},
} as const;
并基于此返回对象,value 属性作为对象键,位置作为值。
示例:
type transformedObject = {
str: 1,
ng: 2,
}
基础对象总是遵循这个结构
type EnumlikeWithMetadata = {
[x: string]: {
value: string;
position: number;
};
};
到目前为止,我取得了 2 种类型,它们都不能以自己的方式工作:
第一个匹配 value 属性到由所有 position 属性组成的联合类型:
type IntegerEnumlikeHelper<T extends EnumlikeWithMetadata> = {
[J in T[keyof T]['value']]: T[keyof T]['position']
};
结果如下所示:
type H = {
str: 2 | 1;
ng: 2 | 1;
}
第二个将值映射到位置,但使其嵌套到原始键中
type IntegerEnumlikeHelper<T extends EnumlikeWithMetadata> = {
[C in keyof T]: { [J in T[C]['value']]: T[C]['position'] };
};
type H = {
readonly a: {
str: 1;
};
readonly b: {
ng: 2;
};
}
将嵌套值映射为键和值的正确方法是什么?
【问题讨论】:
标签: typescript typescript-typings type-inference typescript-generics