🚀功能请求
相关包
此功能请求适用于@angular/core
描述
目前,订阅 EventEmitter
(通过 EventEmitter#subscribe()
)会剥离EventEmitter的类型信息并将其转换为 any
。这是不理想的,正如在 #6934 中指出的那样。
该问题以一个模糊不清的解释关闭,~ "你不应该使用EventEmitter的 subscribe()
方法"。然而, EventEmitter#subscribe()
没有被标记为内部API。
有人建议创建一个重复属性,使用rxjs主题,仅用于提高类型提示,这种建议是不令人满意的。
这是一个请求,为了允许直接订阅 EventEmitter
而保留类型信息,需要做任何必要的工作。
描述你希望实现的解决方案
已经存在于 EventEmitter
上的类型信息应该被保留。
描述你考虑过的替代方案
目前,建议的解决方法似乎是创建一个重复属性,并在关联数据更改时同时更新 @Output()
属性和重复的 Subject
属性。
例如:
class MyComponent {
@Input() name: string;
@Output()
nameChange = new EventEmitter<string>();
nameChange2 = new Subject<string>();
@Input() weather: {prediction: string};
@Output()
weatherChange = new EventEmitter<{prediction: string}>();
weatherChange2 = new Subject<{prediction: string}>();
private updateName(name: string) {
this.name = name;
this.nameChange.emit(name);
this.nameChange2.next(name);
}
private weatherName(value: {prediction: string}) {
this.weather = value;
this.weatherChange.emit(value)
this.weatherChange2.next(value)
}
}
``
5条答案
按热度按时间z9zf31ra1#
这个解决方法
鼠标悬停在天气上时显示的是
{ prediction: string; }
而不是any
https://stackblitz.com/edit/angular-issues-29016?file=src%2Fapp%2Fmy%2Fmy.component.ts
u4vypkhs2#
感谢william-lohan!这对我来说已经足够好了。
zlhcx6iw3#
我认为这个应该立即正确输入,所以我投票不关闭此问题。
blmhpbnm4#
好的,我暂时保持开放状态。
dsekswqp5#
我基于重载实现了一个简单的实现,以遵循当前的实现。如果你愿意,我可以在这个playground链接上提交一个PR。
在Playground中,这三个都会显示出来,但是使用重载,只有前两个会,并且还能够区分调用。