使用 AssemblyScript 在服务器端编译和运行不受信任的代码,我添加了一些附加库来扩展 AssemblyScript 提供的标准库。这些主机函数绑定在文件
env.ts
中定义,我在编译期间使用 --lib
标志包含了该文件:
asc ./assembly/index.ts --lib ./lib/env.ts
现在我想配置一个项目,使用
asinit
创建:
npx asinit .
以便 VSCode 和其他 Typescript 友好的 IDE 识别
env.ts
文件中的类型。我目前拥有的:
./程序集/index.ts
// The i32 AssemblyScript type is found and handled by VSCode
export function add(a: i32, b: i32): i32 {
// Room is defined in env.ts. VSCode says: Cannot find name 'Room'. ts(2304)
Room.describe("Test");
return a + b;
}
除了
asinit
创建的文件之外,我还添加了:
./lib/env.ts
File containing exported host functions and namespaces.
./lib/types/index.d.ts
Type declarations generated from env.ts using tsc --declaration
./lib/types/package.json
Contains: {"types": "index.d.ts"}
是否可以配置
./assembly/tsconfig.json
文件,以便 VSCode 将 ./lib/env/types/index.d.ts
中定义的类型作为内置库的一部分包含在内,而不必在 import
中使用 index.ts
?
./ assembly/tsconfig.json
{
"extends": "assemblyscript/std/assembly.json",
"include": [
"./**/*.ts"
]
}
为了将类型添加到全局范围,文件
./lib/types/index.d.ts
必须仅包含环境类型声明,而不能包含 export
或 import
语句。
tsc --declaration
标志可能会生成带有export
/import
语句的.d.ts文件,因此请确保所有声明都是环境声明,没有导出/导入。
不好
export declare namespace Room {
/* ... */
}
好
declare namespace Room {
/* ... */
}
然后,将包含类型声明文件的所有路径添加到
tsconfig.json
文件中(typeRoots
包含文件夹,或 types
添加特定类型文件):
./ assembly/tsconfig.json
{
"compilerOptions": {
"typeRoots": [
"../node_modules/assemblyscript/std/types",
"../lib/types"
],
},
"include": [
"./**/*.ts",
],
}