Typescript传递枚举类构造函数参数

Typescript传递枚举类构造函数参数,typescript,Typescript,很可能这是一个非常简单的问题,但我不明白为什么不能用enum参数初始化类实例 错误:参数类型{type:MessageTypes}不可分配给参数类型MessageTypes 类别: export enum MessageTypes { STATUS, CONTROL } export enum MessageStatus { OK, ERROR } export enum MessageCommands { REQUEST_STATUS_ALL } export clas

很可能这是一个非常简单的问题,但我不明白为什么不能用enum参数初始化类实例

错误:
参数类型{type:MessageTypes}不可分配给参数类型MessageTypes

类别:

export enum MessageTypes {
  STATUS,
  CONTROL
}
export enum MessageStatus {
  OK,
  ERROR
}
export enum MessageCommands {
  REQUEST_STATUS_ALL
}


export class Message {
  type: MessageTypes;
  status?: MessageStatus;
  command?: MessageCommands;
  body?: any;

  constructor(type: MessageTypes, command?: MessageCommands, status?: MessageStatus, body?: any) {
    this.type = type;
    this.status = status;
    this.command = command;
    this.body = body;
  }
}
用法:
const msg=新消息({type:MessageTypes.CONTROL})

看起来您希望构造函数接受包含
类型的对象
属性:

constructor(settings : { type: MessageTypes, command?: MessageCommands, status?: MessageStatus, body?: any}) {
    this.type = settings.type;
    this.status = settings.status;
    this.command = settings.command;
    this.body = settings.body;
}
或者不传入对象,只传递类型作为第一个参数

const msg = new Message(MessageTypes.CONTROL);
如果要跳过某些参数,只需为不需要的参数传入
null
undefined

const msg = new Message(MessageTypes.CONTROL, null, MessageStatus.OK)

看起来您希望构造函数接受包含
类型
属性的对象:

constructor(settings : { type: MessageTypes, command?: MessageCommands, status?: MessageStatus, body?: any}) {
    this.type = settings.type;
    this.status = settings.status;
    this.command = settings.command;
    this.body = settings.body;
}
或者不传入对象,只传递类型作为第一个参数

const msg = new Message(MessageTypes.CONTROL);
如果要跳过某些参数,只需为不需要的参数传入
null
undefined

const msg = new Message(MessageTypes.CONTROL, null, MessageStatus.OK)

您正在传递一个包含枚举的对象,而不是枚举。将其更改为
新消息(MessageTypes.CONTROL)
或更改构造函数以获取对象。哦,对了。但是我怎么能只通过几个参数呢?(以防我不传递对象)。您传递的是包含枚举的对象,而不是枚举。将其更改为
新消息(MessageTypes.CONTROL)
或更改构造函数以获取对象。哦,对了。但是我怎么能只通过几个参数呢?(如果我没有传递对象)。
新消息(MessageTypes.CONTROL)但是在这种情况下,没有办法跳过一个参数,对吗?@user1935987其他参数是可选的,因此可以跳过。但是它们是位置性的,所以我不能这样做,例如
新建消息(MessageTypes.CONTROL,body) @ USE1935997,您可以用“代码>空NU/CODE >或<代码>未定义填写:<代码>新消息(MasigeType,NULL,NULL,NULL),<代码> AH,就是这样!谢谢请将其添加到答案中,可能有用
新消息(MessageTypes.CONTROL)但是在这种情况下,没有办法跳过一个参数,对吗?@user1935987其他参数是可选的,因此可以跳过。但是它们是位置性的,所以我不能这样做,例如
新建消息(MessageTypes.CONTROL,body) @ USE1935997,您可以用“代码>空NU/CODE >或<代码>未定义填写:<代码>新消息(MasigeType,NULL,NULL,NULL),<代码> AH,就是这样!谢谢请在答案中加上这个,可能会有用