我正在尝试在TypeScript中实例化一个泛型类。
在C#中我会这样做
class MyPacket<T> {...}
var t = typeof(...);
var genericContainer = typeof(MyPacket<>).MakeGenericType(new[]{ t });
var instance = Activator.CreateInstance(genericContainer);
我的用例是我正在接收来自网络的消息。 我还有一个EventEmitter,希望用正确的类型调用它。
(msg: Message): void => {
t: ??? = messageNameToType[msg.name];
const m: RPCConsumerMessage<T> = ???;
emitter.emit(msg.name, m);
}
发射器的使用方式如下:
emitter.on('exampleMessageId', (msg: RPCConsumerMessage<ExampleMessage>) => {
// can now easily use the message in a typesafe way: msg.data.exampleText
});
我的问题:
TypeScript中的等价物是什么,或者实例化泛型类型的整个方法有缺陷吗?是否有另一种模式常用于TypeScript中的那些类型的问题?
答案 0 :(得分:1)
与C#不同,泛型类实例化在运行时实际上是不同的类,在Typescript中,泛型类型参数在编译时被擦除,因此不同的泛型类在运行时实际上是同一个类。
(msg: Message): void => {
const t: any= messageNameToType[msg.name]; // does not really matter.
const m: RPCConsumerMessage<any> = new RPCConsumerMessage<any>();
emitter.emit(msg.name, m);
}