繁体   English   中英

在Typescript中作为函数参数类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM