我有一个界面,我正在尝试实现这个:
export interface Passenger {
id: number,
name: string,
checkedIn: boolean,
checkedInDate?: Date // <- How to make this optional only if checkedIn = false
}
答案 0 :(得分:0)
为什么当checkedInDate
为真时你不要忽略变量checkedIn
的值,就像这样
if(!pessageobj.checkedIn) {
pessageobj.checkedInDate = new Date();
} else {
pessageobj.checkedInDate = some default date like min date;
}
答案 1 :(得分:0)
您无法在界面中声明此信息。但是,您可以在类中实现此行为:
export class Passenger {
id: number;
name: string;
checkedInDate?: Date;
get checkedIn() {
return this.checkedInDate != null;
}
}
答案 2 :(得分:0)
您可以定义Union Type:
export type Passenger = {
id: number,
name: string,
checkedIn: true,
checkedInDate: Date
} | {
id: number,
name: string,
checkedIn: false
checkedInDate?: Date // you can just this field
}
答案 3 :(得分:0)
模板参数可以更具体地指定checkedIn
的类型(不仅仅是boolean
)。然后,路口可以“添加” checkedInDate
的可选版本或必需版本。
export type Passenger<A extends boolean> = {
id: number;
name: string;
checkedIn: A;
} & (A extends false
? {
checkedInDate?: Date;
}
: {
checkedInDate: Date;
});