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;
}
然后你可以迭代基类的键,并在需要时使用扩展的键。
但就我个人而言,我不会特意去更改模型/接口只是为了像这样迭代它们的键(除非这实际上适合你应用的领域)。
