Typescript 当在一种情况下需要可选属性,但在另一种情况下不需要时,如何优化接口对象的使用?

Typescript 当在一种情况下需要可选属性,但在另一种情况下不需要时,如何优化接口对象的使用?,typescript,design-patterns,types,interface,dry,Typescript,Design Patterns,Types,Interface,Dry,我有以下界面: interface IUserInfo { name: string, surname: string, dateOfBirth: Date } 在我的应用程序的某些地方,我需要确保开发者为函数提供了一个包含所有属性的IUserInfo对象: const someFunc = (state: IUserInfo) => { // I want to get an error if developer tries to pass an obj

我有以下界面:

interface IUserInfo {
    name: string,
    surname: string,
    dateOfBirth: Date
}
在我的应用程序的某些地方,我需要确保开发者为函数提供了一个包含所有属性的IUserInfo对象:

const someFunc = (state: IUserInfo) => {
    // I want to get an error if developer tries to pass an object without name, surname or dateOfBirth
}
在其他情况下,我需要有可能传递相同类型的对象,但具有可选属性,因此用户应该能够传递名称/姓氏/出生日期的任意组合,或者什么都不传递

最简单的方法就是实现两个接口,一个具有所需属性,另一个没有属性。但我觉得有更好的方法可以做到这一点,不要重复你自己


如何以最佳方式实现我的需求?

如果您只需要将所有字段标记为可选字段,您可以使用内置的
Partial
类型,如下所示:

类型IPartialUserInfo=Partial;
//现在输入IUserInfo={
//名称?:字符串|未定义;
//姓氏?:字符串|未定义;
//出生日期?:日期|未定义;
// }
你可以试试看