TypeScript找不到名称空间

时间:2019-10-18 05:44:20

标签: javascript typescript

我正在尝试使用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              
  }
}

1 个答案:

答案 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

希望它对您有帮助