如果我有类似的界面:
interface User {
name: string;
age: number;
password: string;
validatePassword(password: string): boolean;
}
我想使用类似OmitFunctions<User>
的实用程序类型,它将将该类型转换为以下形式:
interface User {
name: string;
age: number;
password: string;
}
这可能吗?我想出了这种映射类型,它将validatePassword的类型更改为never
,但是我需要删除validatePassword
type OmitFunctions<T> = {
[P in keyof T]: T[P] extends Function ? never : T[P];
};
您已经走近了,但是您的想法是先过滤所需的键,然后从原始类型中选择过滤后的键:
interface User {
name: string;
age: number;
password: string;
validatePassword(password: string): boolean;
}
type KeyNotOfType<T, V> = {
[P in keyof T]-?: T[P] extends V ? never: P
}[keyof T]
type NoFunction<T> = Pick<T, KeyNotOfType<T, Function>>
type R = NoFunction<User>
// Same as
// type R = {
// name: string;
// age: number;
// password: string;
// }