在打字稿中抽象类的实现中强制定义静态成员

时间:2019-05-10 14:19:10

标签: typescript class abstract-class

我正在研究WebSocket消息系统,并且需要某种方式来识别收到消息时的消息类型。我有一个抽象的Message类,然后有每种消息类型的类,它们都扩展了Message。我已声明public static readonly classIdMessage的成员,然后为Message的每个扩展名设置此值。如果您尝试扩展Message但不定义classId,我希望TypeScript给出错误。该怎么办?

1 个答案:

答案 0 :(得分:0)

您不能使用静态方法将抽象强加于链。尽可能使用public readonly abstract

abstract class Message {
   public readonly abstract classId: string;
}

interface IMessageParams {
  classId: string;
}

class MessageTypeA extends Message {
  constructor(public readonly classId = "MessageTypeA") {
    super();
  }
}

const msgA1 = new MessageTypeA();

// leaves software for exachage
const json = JSON.stringify(msgA1);

// comes back to software domain
const messageParams: IMessageParams = JSON.parse(json);

// get back your message type A:
const msgA2  = new MessageTypeA(messageParams.classId);

alert(msgA2 instanceof MessageTypeA); //true