Dart 映射函数作为具有节点互操作的构造函数
Dart mapping Function as constructor with node interop
我最近开始使用 Dart 进行开发。我需要在节点虚拟机上 运行 Dart。目前,我需要创建一个与外部节点模块的互操作。
此模块仅公开构造函数。我找不到创建映射到包的 Dart class 的方法。
假设导出以下节点模块:
{
Client: [Function: Client],
Server: [Function: Server]
}
在这种情况下,我试图在我的 Dart 工作区中创建一个新的 Client 实例。我创建了以下匿名 classes:
@JS()
@anonymous
abstract class ClientImpl {
// ClientImpl(String, num);
external String get host;
external num get port;
}
@JS()
@anonymous
abstract class Module {
ClientImpl Client(String, num);
}
现在我想将模块class映射到节点模块
final Module _module = require('...');
void main() {
final client = _module.Client('192.168...', 1234);
}
分析器未显示输入错误,Dart 使用 dart2js 正确编译为 Javascript。现在,当我 运行 我在节点 VM 中编译的 js 文件时,我在创建新的客户端实例时遇到异常。它需要 new
关键字。当我在编译的 js 文件中手动添加 new 关键字时,我可以正确实例化互操作 class.
我也试过使用 typedef
代替,但根本没有成功。
typedef ClientFunc = ClientImpl Function(String, num);
我在网上找不到任何描述我的具体情况的例子。这里有没有人遇到同样的问题或者知道我在这里做错了什么?
提前致谢
这不能完全回答我的问题,但我现在正在使用一种解决方法..
const { Client, Server } = require('...')
module.exports = {
Client: (hostAddr, port) => new Client(hostAddr, port),
Server: (...args) => new Server(...args)
}
现在公开了普通函数而不是构造函数。不过,肯定有办法解决上面的问题,而不用像这个一样去写代理。
我最近开始使用 Dart 进行开发。我需要在节点虚拟机上 运行 Dart。目前,我需要创建一个与外部节点模块的互操作。
此模块仅公开构造函数。我找不到创建映射到包的 Dart class 的方法。
假设导出以下节点模块:
{
Client: [Function: Client],
Server: [Function: Server]
}
在这种情况下,我试图在我的 Dart 工作区中创建一个新的 Client 实例。我创建了以下匿名 classes:
@JS()
@anonymous
abstract class ClientImpl {
// ClientImpl(String, num);
external String get host;
external num get port;
}
@JS()
@anonymous
abstract class Module {
ClientImpl Client(String, num);
}
现在我想将模块class映射到节点模块
final Module _module = require('...');
void main() {
final client = _module.Client('192.168...', 1234);
}
分析器未显示输入错误,Dart 使用 dart2js 正确编译为 Javascript。现在,当我 运行 我在节点 VM 中编译的 js 文件时,我在创建新的客户端实例时遇到异常。它需要 new
关键字。当我在编译的 js 文件中手动添加 new 关键字时,我可以正确实例化互操作 class.
我也试过使用 typedef
代替,但根本没有成功。
typedef ClientFunc = ClientImpl Function(String, num);
我在网上找不到任何描述我的具体情况的例子。这里有没有人遇到同样的问题或者知道我在这里做错了什么?
提前致谢
这不能完全回答我的问题,但我现在正在使用一种解决方法..
const { Client, Server } = require('...')
module.exports = {
Client: (hostAddr, port) => new Client(hostAddr, port),
Server: (...args) => new Server(...args)
}
现在公开了普通函数而不是构造函数。不过,肯定有办法解决上面的问题,而不用像这个一样去写代理。