我有一个表示某些数据的类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)
。我曾考虑过使用反射,但无法使其正常工作。
添加一个名为type
的字段,并将其设置为每种类型的唯一字符串。然后,您将知道要使用的类。
class Message {
type: string = "base"
serial: string
length: number
}
class LKMessage extends Message {
type: "LK" = "LK"
}
class UDMessage extends Message {
type: "UD" = "UD"
location: Location
}