【发布时间】:2020-03-22 07:55:01
【问题描述】:
我希望获得 TypeScript 映射类型的“逆”(其属性是严格的字符串,以便“可逆”)。为了说明我想要的结果,我需要一个通用的type
type Inverse<M> = ...
能够变身
type MappedType = {
key1: 'value1'
key2: 'value2'
};
进入
/**
* {
* value1: 'key1';
* value2: 'key2';
* }
*/
type MappedTypeInverse = Inverse<MappedType>
我已经尝试了几件事..但无济于事:
type Inverse<M> = M extends Record<infer O, infer T> ? Record<T, O> : never;
/**
* type MappedTypeInverse = {
* value1: 'key1' | 'key2'
* value2: 'key2' | 'key2'
* }
*/
type MappedTypeInverse = Inverse<MappedType>
type InverseValue<M extends Record<any, any>, V extends M[keyof M]> = V extends M[infer K] ? K : never;
/**
* type MappedTypeInverseValue = unknown // expecting 'key1'
*/
type MappedTypeInverseValue = InverseValue<MappedType, 'value1'>
这甚至可能吗?任何帮助将不胜感激!
【问题讨论】:
-
你想如何处理
type MappedType = { key1: 'value1'; key2: 'value1'; };的反转? -
我正在开发一个不仅接收查询而且还发送查询的应用程序。但是,传入查询的格式与传出查询的格式不同,因为它们使用不同的第三方服务。我希望能够以类型安全的方式处理这种双向转换
标签: typescript typescript-generics mapped-types