Dart Js-Interop 函数类型参数

标签 dart dart-js-interop

作为我的问题的后续 Dart JS Library, how to pass callback functions ,我想确保传递给 D3 的任何函数都具有正确的参数。

所以我想做如下的事情:

@JS('d3')
library d3;

import 'dart:js';
import "package:js/js.dart";

typedef num D3AccessorFunction(List<num> d, num i, List<List<num>> data);


@JS('line')
class Line {
  external Line();
  external String call (List<List<num>> data);
  external Line x(D3AccessorFunction func);
  external Line y(num func(List<num> d, num i, List<List<num>> data));
}

然后当我调用该方法时:
Line line = new Line();
line.x(
    allowInterop(
        (List<num> d, num i, List<List<num>> data) {
            return d[0]+10;
        }
    )
);

如果参数匹配不正确,我希望它提示,例如,
line.x(
    allowInterop(
        (List<num> d) {
            return d[0]+10;
        }
    )
);

不幸的是,allowInterop 吞下了这个提示,你无法摆脱它。
我创建了一个解决方法(在 d3 定义中):
Function d3Function(D3AccessorFunction function) {
    return allowInterop(function);
}

然后我这样称呼它:
line.x(
    d3Function(
        (List<num> d, num i, List<List<num>> data) {
            return d[0]+10;
        }
    )
);

这将引发正确的错误。但我想知道是否有更好的方法来做到这一点。

最佳答案

我们不再需要定义我们自己的 JavaScript 定义文件,因为 Dart 有一个工具可以从 TypeScript 文件中这样做。 JS Facade Generator .
official Dart Page about JS Interoperability 上有更多关于使用它的信息。 .

感谢 DefinitelyTyped project ,几乎可以肯定有一个 TypeScript 文件可以让您执行此操作。如果没有,请改写其中之一,它将帮助 Dart 和 TypeScript 社区。

关于Dart Js-Interop 函数类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009039/

相关文章:

google-chrome-extension - Chrome 扩展中的 Dart/JS 互操作问题

dart - 在没有 Dart VM 的情况下将 Dart API 导出到 JavaScript

Dart js-interop 和重载方法

flutter - Flutter在ListView中添加项目

flutter - 无法使用 jiffy 和 flutter_localizations 因为 intl 版本不同

dart - 类没有 setter '_scheduler' 的实例

google-maps - 使用dart:js调用Google Maps API事件addListener

flutter - 如何在Android Studio中不运行模拟器/模拟器的情况下运行Dart程序

flutter - 试图在抖动中创建更新的数字时钟

dart - 如何在 dart 中使用 javascript 返回的代理