EventEmitter <undefined>和EventEmitter <void>之间有什么区别?

时间:2017-08-02 15:05:16

标签: angular typescript

有时候我们可以有一个泛型变量应该省略的情况。 像这样:

@Component( ... )
class MyComponent {

  @Output()
  public cancel = new EventEmitter<undefined>();

  private myFoo() {
    this.cancel.emit(); // no need to pass any value
  }
}

那么,问题:这是定义EventEmitter类型的更好方法:
EventEmitter<undefined>EventEmitter<void>

  • void更好,因为.emit()调用中没有参数。
  • undefined更好.emit().emit(undefined)
  • 相同

您有什么看法?

1 个答案:

答案 0 :(得分:13)

根据TypeScript文档,void类型同时接受undefinednull - 因此,以下代码有效:

@Component( ... )
class MyComponent {

  @Output()
  public cancel = new EventEmitter<void>();

  private myFoo() {
    this.cancel.emit();
    this.cancel.emit(undefined);
    this.cancel.emit(null);
  }
}

然而使用EventEmitter<undefined>,你只能传递undefined或没有参数,这在你的情况下可能更正确 - 说,我看不出任何重大问题只是因为你把null传递给了一个你不会期待价值的发射器,所以我很想选择void,因为它是较短的选择。