网站搜索

angular - 从接口创建具有可选键的新类型


假设我有一个名为 ISeminar 的接口

export interface ISeminar {
  id: number;
  title: string;
  description: string;
  registrationStartDate: any;
  registrationEndDate: any;
  seminarStartTime?: any;
  seminarEndTime?: any;
  companyList?: any;
  status?: Status;
}

我可以通过使用创建我的控制对象的新类型

controls: { [key in keyof ISeminar] : FormControl}; 

但是在这里,接口的所有键都是必需的。我想保留在接口中是可选的,在控制对象中也是可选的键。

答案#1

请注意,TypeScript 默认情况下根本不会编译接口,除非它需要这样做。如果它确实需要(就像你的情况),它会将其编译成普通的 JavaScript 对象。而在 JavaScript 中没有“可选”字段的概念。

如果你真的需要从你的接口创建FormControls,我猜你最好的办法是使用两个接口,例如

export interface IBaseSeminar {
  id: number;
  title: string;
  description: string;
  registrationStartDate: any;
  registrationEndDate: any;
}

以及一些扩展接口,例如

export interface IScheduledSeminar extends IBaseSeminar  {
  seminarStartTime?: any;
  seminarEndTime?: any;
  companyList?: any;
  status?: Status;
}

然后你可以迭代基类的键,并在需要时使用扩展的键。

但就我个人而言,我不会特意去更改模型/接口只是为了像这样迭代它们的键(除非这实际上适合你应用的领域)。