当您使用 TypeScript 时,我假设您希望输入加载的对象。所以这里是示例类(和一个接口,因为您选择加载许多实现之一,例如)。
interface IExample {
test() : string;
}
class Example {
constructor (private a: string, private b: string) {
}
test() {
return this.a + ' ' + this.b;
}
}
所以你会使用某种加载器来给你一个实现:
class InstanceLoader {
constructor(private context: Object) {
}
getInstance(name: string, ...args: any[]) {
var instance = Object.create(this.context[name].prototype);
instance.constructor.apply(instance, args);
return instance;
}
}
然后像这样加载它:
var loader = new InstanceLoader(window);
var example = <IExample> loader.getInstance('Example', 'A', 'B');
alert(example.test());
目前,我们有一个演员表:<IExample>
- 但是当添加泛型时,我们可以取消它并使用泛型代替。它看起来像这样(记住它还不是语言的一部分!)
class InstanceLoader<T> {
constructor(private context: Object) {
}
getInstance(name: string, ...args: any[]) : T {
var instance = Object.create(this.context[name].prototype);
instance.constructor.apply(instance, args);
return <T> instance;
}
}
var loader = new InstanceLoader<IExample>(window);
var example = loader.getInstance('Example', 'A', 'B');