簡體   English   中英

飛鏢映射用作節點互操作的構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM