angular - TypeScript 编译器不识别接口方法,尽管它已实现
问题描述
代码如下。
图表模态界面.ts
export interface ChartModal {
onModalInit(data: ChartModalContext): void;
}
图表模态上下文.ts
export class ChartModalContext {}
工作中产阶级模态上下文.ts
export class JobMiddleClassModalContext extends ChartModalContext {
public jobLargeClassText: string;
public jobMiddleClassText: string;
}
工作中产阶级modal.ts
export class JobMiddleClassModalComponent implements OnInit, ChartModal {
ngOnInit() {}
onModalInit(data: JobMiddleClassModalContext): void {}
}
图表-modal.service.ts
@Injectable()
export class ChartModalService {
public show(clazz: ChartModal, data?: ChartModalContext): ChartModalRef
{
// .....
}
}
选项卡作业类型.component.ts
export class TabJobTypeComponent implements OnInit, OnDestroy {
constructor(private chartModalService: ChartModalService) {}
public onClickJobMiddleClassPopup(): void {
const data: JobMiddleClassModalContext
= new JobMiddleClassModalContext();
data.jobLargeClassText = 'largeA';
data.jobMiddleClassText = 'middleB';
// error occures at below line
this.chartModalService.show(JobMiddleClassModalComponent, data);
}
}
错误信息:
错误 TS2345:“typeof JobMiddleClassModalComponent”类型的参数不可分配给“ChartModal”类型的参数。“typeof JobMiddleClassModalComponent”类型中缺少属性“onModalInit”。
我的开发环境:
Angular6
TypeScript2.7.2
WebStorm2018.1.4
解决方案
看起来该show
方法需要一个实例而JobMiddleClassModalComponent
不是类型本身,即:
this.chartModalService.show(new JobMiddleClassModalComponent(), data);
如果要传递类型JobMiddleClassModalComponent
,则必须使用等效类型,例如:
abstract class AbstractChartModal {
abstract onModalInit(data: ChartModalContext): void;
}
然后,您可以将您的方法签名更新为:
class ChartModalService {
public show(clazz: typeof AbstractChartModal, data?: ChartModalContext): ChartModalRef
{
return {};
}
}
这反过来又允许您使用以下方式调用它:
this.chartModalService.show(JobMiddleClassModalComponent, data);
推荐阅读
- android - 列表视图自定义适配器不起作用,当我打开 Activity 时没有显示
- html - 防止字符串在表格标签内不中断
- python - 熊猫按列规范化行
- python - 将字符串数组从 python 传递到 C 并在 for 循环中使用(包括代码)
- reactjs - Google 登录,在使用 ReactJS 的扩展中 - 错误无法读取未定义的属性“加载”
- spring - Jpa最大值请求
- python - 没有名为 pyarrow 的模块
- django - {% include %} 不会在其他 html 页面中传递“for loop”数据 - Django
- c++ - 使用 cmake 安装动态库
- kivy - ScatterLayout - do_translation 不起作用