我正试图将我的简单碰撞检测库从JavaScript移植到WebAssembly以提高速度。在查找编译为WASM的语言之后,AssemblyScript似乎是完美的,因为我只需要向JS文件添加类型。整个库是一个Class
和添加类型后,我试图编译它,但它不能正确编译。例如,使用命令npx asc path/to/main.ts -o wasm.wasm --exportRuntime -t wasm.wat --bindings esm
:
export class Test {
constructor() {
console.log('Successful!');
}
};
导致此错误:
WARNING AS235: Only variables, functions and enums become WebAssembly module exports.
export class Test {
~~~~
in main.ts(1,14)
看到错误后,我试图修复它:
class Test {
constructor() {
console.log('Successful!');
}
};
export function getTest(): Test {
return Test;
};
但是这导致了另一个错误:
ERROR AS234: Expression does not compile to a value at runtime.
return Test;
~~~~
in main.ts(8,12)
FAILURE 1 compile error(s)
所以我试着这样做:
class Test {
constructor() {
console.log('Successful!');
}
};
export function getTest(): Test {
return new Test();
};
编译成功,从JavaScript调用getTest
后,我在控制台上得到了输出Successful!
,但它没有返回初始化的类,而是得到了这个:[Number (Internref): 18624]
。
所以我在互联网上搜索解决方案,发现了这个。但是可以接受的解决方案是使用AssemblyScript Loader,这是不赞成的。我也知道as-bind,但它声明它封装在AssemblyScript Loader周围,因此,间接地,它也被弃用了。那么我如何从AssemblyScript导出类呢?
所以,目前没有办法导出类。但是,您可以从JavaScript调用类上的方法,或者调用get或set方法来修改数据。我相信计划中会有类似的函数Vec3#constructor
Vec3#magnitude
ect . .
用Assemblyscript从WebAssembly导出类到JavaScript ?