我需要设计一个日志消息格式,它有一个叫做 "类型 "的属性。我们已经定义了四种类型,为了简单起见,这四种类型被称为A,B,C和D.我想在ENUMS的帮助下实现它,但在JavaScript中不存在这样的定义,这就是为什么我想问,我如何定义一个'自定义'的数据类型,其值为A,B,C和D,使我的类型属性只能取这四个值中的一个。
先谢谢你。
export class LogMessageFormat {
type: myType; //here 'type' should only take the above-mentioned values
time: String;
source: String;
target: String;
}
const MessageTypes = {
A: "A",
B: "B",
C: "C",
D: "D",
};
// If you are concerned with undesired mutation of MessageTypes
// const MessageTypes = Object.freeze({
// A: "A",
// B: "B",
// C: "C",
// D: "D",
// });
class LogMessageFormat {
_type = MessageTypes.A
// .... other props
get type() {
return this._type;
}
set type(newValue) {
if (MessageTypes[newValue] === undefined) {
throw new Error("Invalid message type")
}
this._type = newValue;
}
}
// TEST
const msg = new LogMessageFormat();
console.log(msg.type); // -> log A
msg.type = MessageTypes.B;
console.log(msg.type); // -> log B
msg.type = "no no"; // throws an error