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