是否可以从字符串值获取组件类型(Type< T>)? Smth喜欢:
let typeStr: string = 'MyComponent'; let type: any = resolveType(typeStr); // actual type
解决方法
如果不为类保留“注册表”,则无法做到这一点.
interface Component { } type ComponentClass = { new (): Component }; const REGISTRY = new Map<string,ComponentClass>(); function getTypeFor(name: string): ComponentClass { return REGISTRY.get(name); }
至于如何向此REGISTRY添加条目,您有几个选项,这里有两个:
(1)在每个类定义后手动添加:
class ComponentA implements Component { ... } REGISTRY.set("ComponentA",ComponentA);
或者为它做一个功能:
function register(cls: ComponentClass): void { REGISTRY.set(cls.name,cls); } class ComponentA implements Component { ... } register(ComponentA);
(2)使用装饰者:
只需使用上面的寄存器功能作为装饰器:
@register class ComponentA implements Component { ... }