Typescript 如何使对象中的某些字段为必填字段

Typescript 如何使对象中的某些字段为必填字段,typescript,typescript-typings,Typescript,Typescript Typings,我需要一个接口,使其他一些领域的接口需要。 例如:我有一个IUserInterface: interface IUser { name: string; role?: string; } interface IUserFromDB { id: number; name: string; role: string; } 创建新用户时,角色是可选的。DB设置默认角色,当我从DB中选择用户时-role必须在userObject中。 我可以像上面写的那样编写接口,但在实际项目中,

我需要一个接口,使其他一些领域的接口需要。 例如:我有一个IUserInterface:

interface IUser {
  name: string;
  role?: string;
}

interface IUserFromDB {
  id: number;
  name: string;
  role: string;
}
创建新用户时,角色是可选的。DB设置默认角色,当我从DB中选择用户时-
role
必须在
userObject
中。 我可以像上面写的那样编写接口,但在实际项目中,这种方法会产生大量冗余代码。所以,我需要一些接口,帮助我获得旧接口,并根据需要创建一些可选字段

我想要这样的东西:

interface IUser {
  name: string;
  role?: string;
}

type IUserFromDB = WithRequired<IUser, 'role'[|...]> & {
  id: number;
  ...;
};
接口IUser{
名称:字符串;
角色?:字符串;
}
类型IUserFromDB=带必填项&{
id:编号;
...;
};
请帮助我使用必需的类型创建此。

保留您的IUser界面 使用,以及:

接口IUser{
名称:字符串;
角色?:字符串;
}
IUserFromDB类型=部分、必需和{
id:编号;
...;
};
在这种情况下,除非
IUser
增长,否则不需要使用
Partial
。由于它不会影响运行时,我建议无论如何保留它:)

替代方法 使用通用的完全必需的模型,并对任何派生类型使用和:

接口模型{
名称:字符串;
角色:字符串;
}
类型IUser=部分和拾取;
类型IUserFromDB=部分拾取和{
id:编号;
...;
};
保持您的IUser界面 使用,以及:

接口IUser{
名称:字符串;
角色?:字符串;
}
IUserFromDB类型=部分、必需和{
id:编号;
...;
};
在这种情况下,除非
IUser
增长,否则不需要使用
Partial
。由于它不会影响运行时,我建议无论如何保留它:)

替代方法 使用通用的完全必需的模型,并对任何派生类型使用和:

接口模型{
名称:字符串;
角色:字符串;
}
类型IUser=部分和拾取;
类型IUserFromDB=部分拾取和{
id:编号;
...;
};

到目前为止您尝试了什么?可能重复到目前为止您尝试了什么?可能重复到