我需要一个接口,用于根据需要创建其他接口的某些字段。 例如:我有IUserInterface:
interface IUser {
name: string;
role?: string;
}
interface IUserFromDB {
id: number;
name: string;
role: string;
}
当我创建新用户时-角色是可选的。数据库设置了默认角色,当我从数据库中选择用户时-role
必须位于userObject
中。
我可以像上面写的那样编写接口,但是在实际项目中,这种方法会创建很多冗余代码。因此,我需要一些接口,帮助我获得旧的接口并根据需要创建一些可选字段。
我想要这样的东西:
interface IUser {
name: string;
role?: string;
}
type IUserFromDB = WithRequired<IUser, 'role'[|...]> & {
id: number;
...;
};
请帮助我创建此WithRequired
类型。
答案 0 :(得分:2)
interface IUser {
name: string;
role?: string;
}
type IUserFromDB = Partial<IUser> & Required<Pick<IUser, 'name' | 'role'>> & {
id: number;
...;
};
在这种情况下,除非增长Partial
,否则不需要使用IUser
。由于它不会影响运行时,因此我还是建议保留它:)
使用通用的完全必需模型,并对任何派生类型使用Partial
和Pick
:
interface IUserModel {
name: string;
role: string;
}
type IUser = Partial<IUserModel> & Pick<IUserModel, 'name'>;
type IUserFromDB = Partial<IUserModel> & Pick<IUserModel, 'name' | 'role'> & {
id: number;
...;
};