强制变量在Javascript中只承受定义的值

问题描述 投票:0回答:1

我需要设计一个日志消息格式,它有一个叫做 "类型 "的属性。我们已经定义了四种类型,为了简单起见,这四种类型被称为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;
}
javascript variables types enums format
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.