我有一个Message
类,代表一些数据。每个消息共享相同的标头。但是,根据消息的类型,它们具有不同的有效负载。例如:
class Message {
serial: string
length: number
}
class LKMessage extends Message {}
class UDMessage extends Message {
location: Location
}
这里的问题是我不知道消息类型。用户只需说“发布消息”,然后将类型和数据一起发送即可。 我可以为每种消息类型创建不同的post函数,但是我会写很多相同的代码。
我尝试过这样的事情:
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)
。
我曾考虑过使用反射,但无法使其正常工作。