如果在构造函数中注入服务,则TypeScript编译器无法识别接口

时间:2018-06-05 03:23:52

标签: angular typescript

代码如下。

图表模态-interface.ts

export abstract class ChartModal {
    modalRef: ChartModalRef<any>;
    abstract onModalInit(data: ChartModalContext): void;
}

下载历史模态-component.ts

 export class DownloadHistoryModalComponent implements OnInit, OnDestroy, ChartModal {
    public modalRef: ChartModalRef<any>;

    // error if service is injected
    constructor(private someService:SomeService) {}
    // ok if no service is injected
    // constructor() {}

    ngOnInit() {}
    ngOnDestroy() {}
    onModalInit(data: ChartModalContext): void {}
}

图表-modal.service.ts

@Injectable()
export class ChartModalService {
    public show(clazz: typeof ChartModal): void
    {
        // .....
    }
}

analysis.component.ts

export class AnalysisComponent {
    constructor(private chartModalService: ChartModalService) {}

    private onFinish(): void {
       this.chartModalService.show(DownloadHistoryModalComponent); // error here
    }
}

错误消息:

  

错误TS2345:类型&#39; typeof DownloadHistoryModalComponent&#39;的参数   不能分配给类型&#39; typeof ChartModal&#39;。

的参数

我的开发环境:

  

Angular6
  TypeScript2.7.2
  WebStorm2018.1.4

1 个答案:

答案 0 :(得分:1)

当您传入awk ' FNR==1{ for(i=5;i<=NF;i++){ a[++h]=$i}; NF-=2; $NF="AGE Peso"; print; next} { for(j=5;j<=NF;j++){ printf("%s %s %s %s %s %s\n",$1,$2,$3,$4,a[++k],$j); k=j==NF?k="":k} }' Input_file | column -t 时,您实际上正在将类的构造函数传递给函数。由于没有定义构造函数typeof X具有空构造函数签名(ChartModal)。由于new () => ChartModal定义了带有参数(DownloadHistoryModalComponent)的构造函数,因此它使其与new someService:SomeService) => DownloadHistoryModalComponent的签名不兼容。

如果你的意图是接受任何返回实现ChartModal的东西的构造函数,那么你可以使用任意数量的参数为构造函数使用以下签名:

ChartModal