[英]Dart mapping Function as constructor with node interop
我最近開始在Dart中進行開發。 我需要在節點vm上運行Dart。 當前,我需要創建一個到外部節點模塊的互操作程序。
該模塊僅公開構造函數。 我找不到創建映射到包的Dart類的方法。
假設導出以下節點模塊:
{
Client: [Function: Client],
Server: [Function: Server]
}
在這種情況下,我試圖在Dart工作區中創建Client的新實例。 我創建了以下匿名類:
@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);
}
現在我想將Module類映射到節點模塊
final Module _module = require('...');
void main() {
final client = _module.Client('192.168...', 1234);
}
分析器不會顯示任何鍵入錯誤,並且Dart使用dart2js可以正確編譯為Javascript。 現在,當我在節點VM中運行編譯的js文件時,在創建Client的新實例時會出現異常。 它需要new
關鍵字。 當我在已編譯的js文件中手動添加new關鍵字時,我可以正確地實例化interop類。
我也嘗試過使用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)
}
現在公開了一個普通函數而不是構造函數。 但是,必須有一種方法可以解決上述問題,而不必為此編寫代理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.