我正在尝试使用webGL,TypeScript和node创建一个网络游戏。 我有一个当前看起来像这样的文件结构
> node_modules
> src
engine.ts
webgl.ts
index.ts
index.html
package.json
engine.ts
看起来像这样:
namespace EngineSpace {
export class Engine {
// ....
}
}
和webgl.js
:
namespace EngineSpace {
export class WebGLUtil {
// ....
}
}
和index.js
window.onload = function() {
let engine = new EngineSpace.Engine();
engine.start();
}
但是,当我运行npm start
时,我会得到src/index.ts:5:22 - error TS2304: Cannot find name 'EngineSpace'.
。
我不确定为什么它不能解析此名称空间。鉴于我正在尝试创建游戏,应该如何进行设置/什么是最佳做法?
下面是package.json:
文件
{
"name": "typescript-engine",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "npm run build:live",
"build": "tsc -p .",
"build:live": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
},
"repository": {
"type": "git",
"url": ""
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": ""
},
"homepage": "",
"devDependencies": {
"@types/node": "^12.11.1",
"nodemon": "^1.19.4",
"ts-node": "^8.4.1",
"typescript": "^3.6.4"
}
}
这是tsconfig:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es6","dom"],
"outDir": "lib",
"rootDir": "src",
"strict": false,
"esModuleInterop": true,
"resolveJsonModule": true
}
}
答案 0 :(得分:1)
如果要在nodejs端使用名称空间,则还需要导出它以在另一个模块中使用它。因为命名空间将像这样
转换 engine.ts
namespace EngineSpace {
export class Engine {
public start() {
console.log('hello');
}
}
}
enigne.js
var EngineSpace;
(function (EngineSpace) {
class Engine {
start() {
console.log('hello');
}
}
EngineSpace.Engine = Engine;
})(EngineSpace || (EngineSpace = {}));
如果要在nodejs中使用另一个模块的某些属性,则需要将其导出,并需要在另一个模块中对其进行要求。
请参考nodejs namespace
有关使用打字机的浏览器设置,请参阅this
希望它对您有帮助