Принудительное определение статического члена в реализации абстрактного класса в Typescript - PullRequest
0 голосов
/ 10 мая 2019

Я работаю в системе сообщений WebSocket, и мне нужен какой-то способ определить тип сообщения при его получении. У меня есть абстрактный класс Message, а затем класс для каждого типа сообщений, которые все расширяются Message. Я объявил public static readonly classId членом Message, а затем установил это значение для каждого расширения Message. Я хотел бы, чтобы TypeScript выдавал ошибку, если вы пытаетесь расширить Message, но не определяете classId. Как это можно сделать?

1 Ответ

0 голосов
/ 10 мая 2019

Вы не можете форсировать абстракцию по цепочке статическими методами.Просто используйте 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
...