Javascript 类作为Typescript中的函数参数

Javascript 类作为Typescript中的函数参数,javascript,angular,typescript,Javascript,Angular,Typescript,在Angular 2测试实用程序中,我执行以下操作: fixture = TestBed.createComponent(EditableValueComponent); class SuperFixture<T> { fixture: ComponentFixture<T>; component: T; // passing in the constructor for instances of T constructor(componentCons

在Angular 2测试实用程序中,我执行以下操作:

fixture = TestBed.createComponent(EditableValueComponent);
class SuperFixture<T>
{
  fixture: ComponentFixture<T>;
  component: T;

  // passing in the constructor for instances of T
  constructor(componentConstructor: new () => T)
  {
    this.fixture = TestBed.createComponent<T>(componentConstructor);
    this.component = this.fixture.componentInstance;
  }
}
其中EditableValueComponent是一个普通的组件类

我想知道它是如何工作的:

static createComponent<T>(component: Type<T>): ComponentFixture<T>;
静态createComponent(组件:类型):ComponentFixture;
因为我想做一些类似的事情(我想简化一些测试工作):

导出类超细纤维
{  
夹具:组件夹具;
成分:T;
构造函数()
{         

this.fixture=TestBed.createComponent(T);//您仍然需要传递实际的类(创建类实例的构造函数)进入
superfraxture
的构造函数。在hood
TestBed下。createComponent
使用
new
调用提供的构造函数来创建提供的类的实例。因此
超类
签名可能如下所示:

fixture = TestBed.createComponent(EditableValueComponent);
class SuperFixture<T>
{
  fixture: ComponentFixture<T>;
  component: T;

  // passing in the constructor for instances of T
  constructor(componentConstructor: new () => T)
  {
    this.fixture = TestBed.createComponent<T>(componentConstructor);
    this.component = this.fixture.componentInstance;
  }
}
类超结构
{
夹具:组件夹具;
成分:T;
//传递T实例的构造函数
构造函数(componentConstructor:new()=>T)
{
this.fixture=TestBed.createComponent(componentConstructor);
this.component=this.fixture.componentInstance;
}
}

当时正在研究答案,但不得不出去喝咖啡。'_(ツ)_/“”

您正在使用的语言功能称为in-TypeScript。它允许在运行时使用“类型变量”(如
)定义类型,这些变量与函数参数分开

在此之前,类型变量被作为函数参数传递,此时函数需要类型T的实例。这就是错误的含义

您所做的更改之所以有效,是因为您正在调用中以正确的位置传递类型变量和实例

superfraxture
对象在创建时获取
T
的值,然后它将该类型变量与
component
的值一起传递给构造函数中的
createComponent