使用类或接口在typescript组件中获取输入

时间:2017-06-16 10:05:23

标签: angular class typescript interface

我想在角度2中创建一个组件,它将采用一些输入参数。我对于应该使用类或接口输入以及为什么有点困惑?对于以下组件我使用了接口

import { Component, Input, Output, EventEmitter } from "@angular/core";

@Component({
  moduleId: module.id,
  selector: 'combo-compo',
  template: `
      <select name="theme" class="form-control" [ngModel]="selectedObject" (ngModelChange)="onChangeObj($event)">
        <option [ngValue]="theme" *ngFor="let theme of dataObject" >{{theme.value}}</option>
      </select>
            `
})

export class ComboComponent {
  selectedObject: ComboInterface;
  @Input() dataObject: Array<ComboInterface>;
  @Output() onComboChange = new EventEmitter();

  onChangeObj(newObj: ComboInterface) {
    this.selectedObject = newObj;
    this.onComboChange.emit(this.selectedObject);
  }

}

interface ComboInterface {
    key: string;
    value: string;
}

2 个答案:

答案 0 :(得分:2)

在Typescript中,您可以自由使用CLASSINTERFACE

以下是可以帮助您在选择正确结构时做出正确决定的原因:

界面:您只能使用相应的类型声明属性。这意味着您不能在其中包含函数,也不能在声明时初始化这些属性。

:您可以声明属性以及默认值以及函数。

PS:当你只想要数据的结构时,接口比类更受欢迎

答案 1 :(得分:1)

接口比类更可取,因为它们更灵活,任何类都可以实现该接口并用于输入。此外,如果您是单元测试,则可以创建实现该接口的模拟或存根类,以便您可以单独测试组件。

虽然,实际上,如果你只有一个实现这个接口的类,并且它没有在其他地方使用,那么可能没有必要去创建一个接口的额外步骤,而你应该只是我们一个班级。