我无法理解为什么下面的代码会起作用:
type MapOverString<T extends string> = { [K in T]: K };
type IfStringMapOverIt<T> = T extends string ? MapOverString<T> : never;
type ThisWorks = MapOverString<'a'>;
// { a: 'a' }
type ThisAlsoWorks = IfStringMapOverIt<'a'>;
// { a: 'a' }
type Union = 'a' | 'b' | 'c';
type ThisWorksToo = MapOverString<Union>;
// { a: 'a', b: 'b', c: 'c' }
type ThisDoesnt = IfStringMapOverIt<Union>;
// MapOverString<'a'> | MapOverString<'b'> | MapOverString<'c'>
Run Code Online (Sandbox Code Playgroud)
我必须失去了一些东西,因为MapOverString和IfStringMapOverIt看起来像他们应该相同的功能。
最终,我使用字符串文字和泛型来级联配置类型的排列。例如,如果您想StringConfig<T>配置 …