将类型作为值传递给打字稿

时间:2018-10-06 13:35:27

标签: angular typescript

我想将接口作为值传递给配置对象:

export interface RouterConfig {
  startEvents?: typeof RouterEvent[];
  completeEvents?: typeof RouterEvent[];
}

用法应为:

private config: RouterConfig = {
  startEvents: [NavigationStart],
  completeEvents: [NavigationEnd, NavigationCancel, NavigationError]
};

但是它抛出一个错误:

  

属性'completeEvents'的类型不兼容。类型'((typeof NavigationEnd | typeof NavigationCancel | typeof NavigationError)[]'不可分配给类型'RouterEvent []'。输入'typeof NavigationEnd | NavigationCancel的类型|无法将typeof NavigationError”分配给“ RouterEvent”类型。类型“ typeof NavigationEnd”不可分配给类型“ RouterEvent”。 “ typeof NavigationEnd”类型缺少属性“ id”。

我该如何解决?

这里是stackblitz reproduction

请注意,RouterEvent是一类

1 个答案:

答案 0 :(得分:3)

所有NavigationEndNavigationCancelNavigationError类都具有带参数的构造函数。类型RouterEvent的构造函数不带参数。这就是分配失败的原因。如果您想使用带有任意数量参数的构造函数,则需要使用反映这一点的构造函数签名,例如,这可以工作new (...args: any[]) => RouterEvent Angular已经以{{的形式)定义了该构造函数的类型别名。 1}}类型。所以我们可以这样写:

Type