我正在使用自定义 TypeScript 实用程序类型
NestedKeyOf
将嵌套键提取为点符号字符串,例如 "parent.child"
。该类型与 "strict": false
中的 tsconfig.json
一起按预期工作,但启用 "strict": true
会导致问题,特别是对于可选属性。
这是我的
NestedKeyOf
类型定义:
type NestedKeyOf<T> = T extends object
? {
[K in keyof T & string]: T[K] extends object
? K | `${K}.${NestedKeyOf<T[K]>}`
: K;
}[keyof T & string]
: never;
当在
"strict": false
中的
angularCompilerOptions
中设置
tsConfig.json
时,此类型在 Angular 编译期间按预期工作。
示例代码:
这是具有以下类型的示例:
export interface Node {
name: string;
version?: string;
ip_address?: IPAddress;
}
export interface IPAddress {
ipv4?: string;
ipv6?: string;
};
我希望编译以下代码:
const nkn: NestedKeyOf<Node> = 'ip_address.ipv6';
StackBlitz 链接
我创建了一个示例来重现该问题。
您需要将对象标记为具有所需的所有键:
const nkn: NestedKeyOf<Node> = 'ip_address.ipv6'
export interface Node {
name: string;
version?: string;
ip_address?: IPAddress;
}
export interface IPAddress {
ipv4?: string;
ipv6?: string;
}
type NestedKeyOf<T extends object, R extends Required<T> = Required<T>> = keyof {
[K in keyof R & string as R[K] extends object ? K | `${K}.${NestedKeyOf<R[K]>}` : K]: any
}