Typescript传递枚举类构造函数参数
很可能这是一个非常简单的问题,但我不明白为什么不能用enum参数初始化类实例 错误: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
参数类型{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,就是这样!谢谢请在答案中加上这个,可能会有用