如果我有这样的界面:
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];
};
答案 0 :(得分:1)
您的方法很接近,但是我们的想法是先过滤所需的键,然后从原始类型中选择过滤的键:
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;
// }