如何在TypeScript中创建条件必需的类属性
我正在尝试创建一个事件类,该类的数据属性是基于事件类型键入的。代码如下:如何在TypeScript中创建条件必需的类属性,typescript,typescript-generics,Typescript,Typescript Generics,我正在尝试创建一个事件类,该类的数据属性是基于事件类型键入的。代码如下: export interface EventTypes { localeChange: { locale: string; }; translationsChange: undefined; } export default class Event<T extends keyof EventTypes> { eventType: T; data: EventTypes[T];
export interface EventTypes {
localeChange: {
locale: string;
};
translationsChange: undefined;
}
export default class Event<T extends keyof EventTypes> {
eventType: T;
data: EventTypes[T];
constructor(
eventType: T,
...data: EventTypes[T] extends undefined ? [] : [EventTypes[T]]
) {
this.eventType = eventType;
this.data = data[0];
}
}
如果我将属性的定义更改为data?:EventTypes[T]代码>错误消失,但属性始终可能未定义-即使在具有需要数据的事件类型的实例中也是如此
如果您能给我一个建议,告诉我如何键入数据
属性,使其与构造函数兼容,并完全按照事件类型
中的定义键入数据,我将不胜感激。您需要将数据设为可选数据,因为您不能将未定义的变量分配给所需的变量,反之亦然
export default class Event<T extends keyof EventTypes> {
eventType: T;
data?: EventTypes[T]; //Making data optional
constructor(
eventType: T,
...data: EventTypes[T] extends undefined ? [] : [EventTypes[T]]
) {
this.eventType = eventType;
this.data = data[0];
}
}
导出默认类事件{
事件类型:T;
数据?:事件类型[T];//使数据可选
建造师(
事件类型:T,
…数据:EventTypes[T]扩展未定义?[]:[EventTypes[T]]
) {
this.eventType=eventType;
this.data=数据[0];
}
}
好吧,这就是我担心的。非常感谢。
export default class Event<T extends keyof EventTypes> {
eventType: T;
data?: EventTypes[T]; //Making data optional
constructor(
eventType: T,
...data: EventTypes[T] extends undefined ? [] : [EventTypes[T]]
) {
this.eventType = eventType;
this.data = data[0];
}
}