使用 Assemblyscript 将 类 从 WebAssembly 导出到 JavaScript?

Exporting classes from WebAssembly to JavaScript with Assemblyscript?

我正在尝试使用 Assemblyscript 将 TypeScript 编译为 WebAssembly,我正在尝试从 WebAssembly 导出 class,以便它可以在 JavaScript 中使用。澄清一下,我希望能够在 .js 文件中构建 class 的新实例,即使 class 是在 .wasm.

中定义的

我做了一些研究和实验,似乎 Assemblyscript 会将 class 方法导出为函数,而不是将 class 作为一个整体导出。

这就是我希望它在 WebAssembly 方面的样子:

export class Point {
  public x: i32;
  public y: i32;

  constructor(x: i32, y: i32) {
    this.x = x; 
    this.y = y;
  }
}

这就是我想在 JavaScript 方面完成的事情:

// Omitted code for instatiating the Wasm Module

var exports = object.instance.exports; // The exports of the Wasm instance
var Point = exports.Point; // The Point class

let point = new Point(0, 0) // Construct a new Point

所以我想知道是否有人知道实现此(或至少类似)功能的方法?

WebAssembly 有一个非常基本的类型系统,它只有四种数字类型。为了将最基本的类型(如字符串)编译为 WebAssembly,需要创建相当多的 'glue code'(对于字符串,数据是通过线性内存交换的)。

实现您描述的目标是可能的,但需要创建更多 'glue code' AssemblyScript 当前能够生成的内容。

我设法找到了解决方案,并认为我应该 post 在这里。 AssemblyScript 的主要作者(至少我是这么认为的)写了一个加载程序,这是我一开始没有找到的项目的一部分。

可以在这里找到: https://github.com/AssemblyScript/assemblyscript/tree/master/lib/loader

这里有一个关于如何使用它从 Wasm 导出 类 到 JavaScript 的简短指南: https://github.com/AssemblyScript/docs/blob/master/basics/loader.md