Dart Js-Interop函数类型参数

时间:2016-08-18 02:26:01

标签: dart dart-js-interop

作为我的问题{{3}}的后续内容,我想确保传递给D3的所有函数都有正确的参数。

所以我想做以下的事情:

build:
  script_env:
    - VERSION

然后当我调用方法时:

@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;
        }
    )
);

不幸的是,allowInterop吞下了这个投诉,你无法摆脱它。 我已经创建了一个解决方法(在d3定义中):

line.x(
    allowInterop(
        (List<num> d) {
            return d[0]+10;
        }
    )
);

然后我称之为:

Function d3Function(D3AccessorFunction function) {
    return allowInterop(function);
}

哪个会抛出正确的错误。但我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

我们不再需要定义自己的JavaScript定义文件,因为Dart有一个从TypeScript文件中执行此操作的工具。 JS Facade Generatorofficial Dart Page about JS Interoperability。 有关在DefinitelyTyped project上使用此功能的更多信息。

感谢like this,几乎可以肯定有一个TypeScript文件允许你这样做。如果没有,请编写其中一个,它将有助于Dart和TypeScript社区。