小编eva*_*nbb的帖子

TypeScript 条件类型的映射与受约束的泛型不同吗?

我无法理解为什么下面的代码会起作用:

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)

游乐场链接

我必须失去了一些东西,因为MapOverStringIfStringMapOverIt看起来像他们应该相同的功能。

最终,我使用字符串文字和泛型来级联配置类型的排列。例如,如果您想StringConfig<T>配置 …

typescript typescript-generics mapped-types

8
推荐指数
1
解决办法
81
查看次数