В lodash функция _.invert
инвертирует ключи и значения объекта:
var object = { 'a': 'x', 'b': 'y', 'c': 'z' };
_.invert(object);
// => { 'x': 'a', 'y': 'b', 'z': 'c' }
Типы lodash в настоящее время объявляют это, чтобы всегда возвращать string
→ string
отображение:
_.invert(object); // type is _.Dictionary<string>
Но иногда, особенно если вы используете константное утверждение , подойдет более точный тип:
const o = {
a: 'x',
b: 'y',
} as const; // type is { readonly a: "x"; readonly b: "y"; }
_.invert(o); // type is _.Dictionary<string>
// but would ideally be { readonly x: "a", readonly y: "b" }
Можно ли получить такие точные наборы?Это объявление приближается:
declare function invert<
K extends string | number | symbol,
V extends string | number | symbol,
>(obj: Record<K, V>): {[k in V]: K};
invert(o); // type is { x: "a" | "b"; y: "a" | "b"; }
Ключи верны, но значения являются объединением клавиш ввода, т. Е. Вы теряете специфику отображения.Можно ли получить этот идеал?