Javascript 类作为Typescript中的函数参数
在Angular 2测试实用程序中,我执行以下操作: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
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
的构造函数。在hoodTestBed下。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