代码之家  ›  专栏  ›  技术社区  ›  Murhaf Sousli

在typescript中将类型作为值传递

  •  1
  • Murhaf Sousli  · 技术社区  · 7 年前

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

    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 | typeof NavigationCancel | typeof NavigationError”不可分配给类型“RouterEvent”。类型“typeof NavigationEnd”不可分配给类型“RouterEvent”。“typeof NavigationEnd”类型中缺少属性“id”。

    我该怎么修?

    这是一个 stackblitz reproduction

    请注意 RouterEvent

    1 回复  |  直到 7 年前
        1
  •  4
  •   Titian Cernicova-Dragomir    7 年前

    所有的班级 NavigationEnd , NavigationCancel NavigationError 有带参数的构造函数。类型 RouterEvent 有一个没有参数的构造函数。这就是作业失败的原因。如果你想接受一个包含任意数量参数的构造器,你需要使用一个构造器签名来反映它,例如,这会起作用 new (...args: any[]) => RouterEvent Type 类型。所以我们可以这样写:

    import { Component, Type } from '@angular/core';
    import { RouterEvent, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
    
    export interface RouterConfig {
      startEvents?: Type<RouterEvent>[];
      completeEvents?: Type<RouterEvent>[];
    }
    let config: RouterConfig = {
      startEvents: [NavigationStart],
      completeEvents: [NavigationEnd, NavigationCancel, NavigationError]
    };
    
    推荐文章