如何处理具有重载方法的JS库的接口?
例如,Leaflet.js为Map对象定义了以下两个:
openPopup(popup); // opens the given popup
openPopup(html, LatLng, popOptions); // creates a popup with the html at the location, using the popup options.
我想出的是:
@JS("L.Map")
class Map {
/* code */
external Map openPopup(dynamic popup, [LatLng coords, PopupOptions opts]);
/* code */
}
有更好的方法吗?注意:这似乎有效,但分析器抱怨:没有为Map类定义openPopup方法。
飞镖:1.17.1
包:JS-0.6.0
答案 0 :(得分:1)
到目前为止,我还没有能够使用JS()
指令为实例成员/方法指定不同的名称,这是一个很大的问题,特别是对于方法名称与Dart关键字冲突的javascript对象(例如在javascript Promise中“捕获”。我最终使用普通dart:js
。无论如何,即使使用package/js
,我最终添加了另一个层来使api变得更加狡猾(尤其是回调和承诺),尤其是强制执行参数类型。
我期望能够做到(在你的例子中)
@JS("L.Map")
class Map {
JS('openPopup')
external Map openPopupHtml(String html, [LatLng coords, PopupOptions opts]);
JS('openPopup')
external Map openPopup(Popup popup);
}
但这似乎不起作用。也许应该将其视为功能增强。