我正在尝试在我的泛型类中创建一个类型参数的新对象。在我的类View中,我有 2 个作为类型参数传递的泛型类型对象列表,但是当我尝试 make 时new TGridView(),TypeScript 说:
View
new TGridView()
找不到符号’TGridView
这是代码:
module AppFW { // Represents a view export class View<TFormView extends FormView, TGridView extends GridView> { // The list of forms public Forms: { [idForm: string]: TFormView; } = {}; // The list of grids public Grids: { [idForm: string]: TGridView; } = {}; public AddForm(formElement: HTMLFormElement, dataModel: any, submitFunction?: (e: SubmitFormViewEvent) => boolean): FormView { var newForm: TFormView = new TFormView(formElement, dataModel, submitFunction); this.Forms[formElement.id] = newForm; return newForm; } public AddGrid(element: HTMLDivElement, gridOptions: any): GridView { var newGrid: TGridView = new TGridView(element, gridOptions); this.Grids[element.id] = newGrid; return newGrid; } } }
我可以从泛型类型创建对象吗?
由于编译后的 JavaScript 已删除所有类型信息,因此您不能用于T新建对象。
T
您可以通过将类型传递给构造函数以非泛型方式执行此操作。
class TestOne { hi() { alert('Hi'); } } class TestTwo { constructor(private testType) { } getNew() { return new this.testType(); } } var test = new TestTwo(TestOne); var example = test.getNew(); example.hi();
您可以使用泛型扩展此示例以收紧类型:
class TestBase { hi() { alert('Hi from base'); } } class TestSub extends TestBase { hi() { alert('Hi from sub'); } } class TestTwo<T extends TestBase> { constructor(private testType: new () => T) { } getNew() : T { return new this.testType(); } } //var test = new TestTwo<TestBase>(TestBase); var test = new TestTwo<TestSub>(TestSub); var example = test.getNew(); example.hi();