如何在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];
  }
}