嵌套对象的keyof
嵌套对象的keyof
·
1 分钟阅读时长
需求
interface User {
parent: {
name: string;
};
age: number;
name: string;
}
type Column = {
key: keyof User;
};
const columns: Column[] = [
{
key: 'name'
},
{
key: 'name1'
},
{
key:'parent.name'
}
];
解决办法
type Paths<T> = T extends object ? { [K in keyof T]:
`${Exclude<K, symbol>}${"" | `.${Paths<T[K]>}`}`
}[keyof T] : never
type Column = {
key: Paths<User>;
};
除了自己写Paths
类型外,还可以使用现成的库,比如type-fest
中的Path
类型。
效果
const columns: Column[] = [
{
key: 'name'
},
{
key: 'parent.name' // ok
},
{
key: 'parent.name1' // error
}
];