目前想到的是用 obj 转一下
type A = 'a' | 'b'
type B = keyof {
[key in keyof { [key in A]: any } as `mapped ${key}`]: any
}
// type B = 'mapped a' | 'mapped b'
1
rbe 2021-09-15 14:21:56 +08:00
type A = 'a' | 'b'
type B = `mapped ${A}` // type B => 'mapped a' | 'mapped b' ts 版本要大于 4.1 |
2
Leviathann OP @rbe 我例子没举好,模板字符串类型是一个比较特殊的情况
如果定义一个从下划线转驼峰的类型 type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S> type A = 'aa_bb' | 'bb_cc' 要映射成 type B = 'aaBb' | 'bbCc' |
3
namelosw 2021-09-15 15:53:01 +08:00
用 obj 应该是比较理想的方法。
另外一种方法就是无限 extends ? 三元嵌套了,很难读。 |