У меня есть класс Message
, представляющий некоторые данные. Каждое сообщение имеет один и тот же заголовок. Однако в зависимости от типа сообщения они имеют разные полезные данные. Например:
class Message {
serial: string
length: number
}
class LKMessage extends Message {}
class UDMessage extends Message {
location: Location
}
Проблема в том, что я не знаю тип сообщения. Пользователь просто говорит «отправить сообщение» и отправляет тип вместе с данными. Потенциально я мог бы создать разные пост-функции для каждого типа сообщения, но я бы написал много одного и того же кода.
Я пробовал что-то вроде этого:
interface MessagePayload {}
interface LKMessagePayload extends MessagePayload {}
interface UDMessagePayload extends MessagePayload {
location: Location
}
class Message<T extends MessagePayload> {
serial: string
length: number
payload: T
}
Проблема в создании экземпляра: пользователь отправляет тип как string
, поэтому я не могу просто написать new Message<type>(data)
. Я подумал об использовании отражения, но не смог заставить его работать.