[英]Class as function parameter in Typescript
在Angular 2测试实用程序中,我执行以下操作:
fixture = TestBed.createComponent(EditableValueComponent);
其中EditableValueComponent是普通的组件类。
我不知道它是如何工作的:
static createComponent<T>(component: Type<T>): ComponentFixture<T>;
因为我想做类似的事情(我想简化一些测试内容):
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中称为“ 通用” 。 它允许在运行时使用与函数参数分开的“ 类型变量 ”(如<T>
)定义类型。
以前,当函数需要类型T的实例时,将类型变量作为函数参数传递。这就是错误的含义。
之所以进行更改,是因为您将类型变量和实例传递给它们在调用中的正确位置。
SuperFixture
对象在创建时会获取T
的值,然后它将该类型变量以及component
的值传递给构造函数中的createComponent
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.