我有一个像这样的对象:
const classMap = {service1: Service1, service2: Service2}
其中Service1和Service2是对类的引用,可以有几百个类。
现在我有了一个动态创建的对象,它对应于:
const instanceMap = {service1: new classMap.service1(), service2: new classMap.service2()}
并且我想输入这个instanceMap(这里类型推导失败,因为对象是动态创建的)。
“typeof classMap”的幼稚方法不起作用,当我使用instanceMap.service1时,我在自动完成中看不到Service1类的方法,似乎typeof操作符正在做一个typeof ServiceX,它擦除了ServiceX类的所有方法。
1条答案
按热度按时间8gsdolmq1#
您可以在
classMap
的属性上创建mapped type,其中将InstanceType<T>
实用程序类型应用于每个属性值:这相当于
因此,您可以使用该类型注解
instanceMap
,而不会出错:现在,如果你想动态地创建
instanceMap
,那么你还需要在你的函数中Map类型,并在实现中自由地使用类型Assert,因为编译器还没有足够的智能来遵循逻辑。Playground代码链接