如何使用点符号排除对象的某些关键点?
我想编写一个ValueOrStringExcludeNestedKeys<T, K>
类型,将string
类型递归地添加到任何基元类型属性或子属性中,excluding将K
中指定的路径并集处的任何属性递归地添加到应该不受影响的位置.
例如:
type Values = {
a: {
b: {
c: string;
d: number;
};
e: string;
};
f: number;
g: number;
h: {
i: number;
}
};
type Result = ValueOrStringExcludeNestedKeys<Values, 'a.b.c' | 'f'>;
/* type Result = {
a: {
b: {
c: string; // <-- unchanged
d: number | string;
};
e: string; // <-- (string | string is just string)
};
f: number; // unchanged
g: number | string;
h: {
i: number | string;
};
} */
在上面的代码中,a.b.d
、a.e
、a.g
和h.i
属性都使用| string
进行了转换,而a.b.c
和f
属性没有变化.
如何才能做到这一点?