43. 替换联合类型中的键
中等
实现一个通用工具类型 ReplaceKeys<U, T, Y>
,用于替换联合类型中的键,如果某个类型没有这个键,则跳过替换。
该工具类型接受三个参数,如果无法匹配到 Y
则类型置为 never
。
例如:
type NodeA = {
type: "A"
name: string
flag: number
}
type NodeB = {
type: "B"
id: number
flag: number
}
type NodeC = {
type: "C"
name: string
flag: number
}
type Nodes = NodeA | NodeB | NodeC
/**
* would replace `name` from string to number, replace `flag` from number to string.
* expected to be:
* {
* type: 'A',
* name: number,
* flag: string
* } |
* {
* type: 'B',
* id: number,
* flag: string
* } |
* {
* type: 'C',
* name: number,
* flag: string
* }
*/
type ReplacedNodes = ReplaceKeys<
Nodes,
"name" | "flag",
{ name: number; flag: string }
>
/**
* would replace `name` to never.
* expected to be:
* {
* type: 'A',
* name: never,
* flag: number
* } |
* NodeB |
* {
* type: 'C',
* name: never,
* flag: number
* }
*/
type ReplacedNotExistKeys = ReplaceKeys<
Nodes,
"name",
{ aa: number }
>