typescript - 如何实现具有未知泛型属性的接口?
问题描述
在我们的项目中,我们有一个这样的界面:
export interface InterfaceA {
closed: EventEmitter<unknown>;
}
然后我们在这样的组件中使用它:
export interface CloseData {
closeSource: CloseSource;
}
export class ComponentB implements InterfaceA {
closed = new EventEmitter<CloseData>();
...
}
“CloseSource”是一个枚举。
它工作得很好,除非我们启用“ strictFunctionTypes ”标志(或“ strict ”标志)我们得到这个错误:
错误 TS2416:“ComponentB”类型中的“已关闭”属性不可分配给基类型“InterfaceA”中的相同属性。
类型“EventEmitter”不可分配给类型“EventEmitter”。
属性“观察者”的类型不兼容。
类型 'Observer[]' 不可分配给类型 'Observer[]'。
类型“观察者”不可分配给类型“观察者”。
类型“未知”不可分配给类型“CloseData”。
根据我的发现(例如:https ://stackoverflow.com/a/68711655 ),这是因为函数的逆变换。
首先,我不明白这背后的逻辑。
其次,我们可以做些什么来使它正确?我们不想使用“ any ”,因为我们的代码质量分析工具告诉我们它很糟糕,而且我们不想禁用似乎使我们的代码更安全的标志。
有没有神奇的解决方案?
这是一个示例打字稿语言
解决方案 C 并不完美,因为仍然有一个“任何”,但我认为这是朝着正确方向迈出的一步(我们可以尝试让使用我们的库的人尽可能添加泛型)。有没有办法让代码在没有“任何”且不更改 ComponentC(或 A)类的情况下工作?
解决方案
推荐阅读
- r - 绘制作为星期几和一天中时间函数的买入比率直方图
- algorithm - 关于Min Max Heap DeleteMin的时间复杂度
- python - 如何使用 python 访问当前打开的浏览器 URL
- dart - 如何在颤动中执行 VoidCallback
- gitlab - 在 Xcode 中推送到 gitlab 后项目为空
- c++ - 编译程序时遇到 c++ Visual Studio 编译器错误“htonf”
- c++ - 为什么我需要为传递给 Y 组合器的函数指定返回值
- amazon-web-services - EC2 - 使 Windows 实例可从任何地方访问 (XAMPP)
- angular - ngx-color-picker 在输入更改时被关闭
- python - Django,如何使用 2 层外键过滤数据