Dart js-interop 和重载方法
Dart js-interop and overloaded methods
你如何处理与具有重载方法的 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 */
}
有没有更好的方法?注意:这似乎有效,但分析器抱怨:没有为 class 地图定义方法 openPopup。
飞镖:1.17.1
package:js-0.6.0
到目前为止,我无法使用 JS()
指令为实例 member/method 指定不同的名称,这是一个大问题,尤其是对于具有方法名称的 javascript 对象与 Dart 关键字冲突(例如 javascript Promise 中的 'catch')。我最终使用了普通 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);
}
但这似乎不起作用。也许应该将其视为功能增强。
你如何处理与具有重载方法的 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 */
}
有没有更好的方法?注意:这似乎有效,但分析器抱怨:没有为 class 地图定义方法 openPopup。
飞镖:1.17.1
package:js-0.6.0
到目前为止,我无法使用 JS()
指令为实例 member/method 指定不同的名称,这是一个大问题,尤其是对于具有方法名称的 javascript 对象与 Dart 关键字冲突(例如 javascript Promise 中的 'catch')。我最终使用了普通 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);
}
但这似乎不起作用。也许应该将其视为功能增强。