类如打字稿
问题描述:
功能参数在角2测试工具我这样做:类如打字稿
fixture = TestBed.createComponent(EditableValueComponent);
其中EditableValueComponent是一个正常的组件类。
我不知道它是如何工作的:
static createComponent<T>(component: Type<T>): ComponentFixture<T>;
Beceause我想要做类似的事(我想简化一些测试的东西):
export class SuperFixture<T>
{
fixture: ComponentFixture<T>;
component: T;
constructor()
{
this.fixture = TestBed.createComponent(T); // <--- problem here!
this.component = this.fixture.componentInstance;
}
}
的问题是:
'T'只是指一种类型,但在这里被用作价值。'
编辑#1
我解决了这个问题是这样的:
constructor(component)
{
this.fixture = TestBed.createComponent<T>(component);
但我仍然不知道它是如何工作..
答
您仍然需要通过实际的类(构造函数创建一个类的实例)构造函数SuperFixture
。调用TestBed.createComponent
调用提供的构造函数new
来创建提供的类的实例。所以SuperClass
签名可能看起来像这样:
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;
}
}
答
正在处理该答案,但不得不步行喝咖啡。 ¯_(ツ)_/
您正在使用的语言功能在TypeScript中称为Generic。它允许在运行时使用“类型变量”(如<T>
)定义类型,它们与函数参数分开。
之前,类型变量正在通过为函数参数,当函数预期类型T的实例,这是什么错误意味着。
您所做的更改的工作原理是因为您正在将类型变量和实例传递到调用中正确的位置。
的SuperFixture
对象获得,当你创建它,然后将这种类型的变量传递给createComponent
在构造函数中,与component
值沿着T
值。