我的命名空间未定义。打字稿

时间:2015-12-03 18:01:47

标签: node.js visual-studio namespaces typescript

我获得了Visual Studio Community 2015 + Node.js工具 我创建了“Blank Node.js控制台应用程序”Typescript项目

我添加了一个TypeScript文件,TypeScript1.ts并添加以下内容:

module MyModule {
    export class Calculator {
        add(x: number, y: number): number {
            return x + y;
        };
        constructor() { }
    }
}

在主文件中,app.ts我把它:

/// <reference path="TypeScript1.ts" />
console.log('Hello world');
var subject: MyModule.Calculator;
subject = new MyModule.Calculator();
var result: number = subject.add(2, 3);
console.log(result);

它构建没有问题,但是当我尝试调试/运行时,它声明:

ReferenceError: MyModule is not defined
    at Object.<anonymous> (C:\Users\User\Documents\Visual Studio 2015\Projects\NodejsConsoleApp1\NodejsConsoleApp1\app.js:8:15)

我做错了什么?

4 个答案:

答案 0 :(得分:0)

我会检查app.js内容是否包含来自TypeScript1.ts文件的代码。我的猜测是没有。

您可以按如下方式运行tsc进行修复:

tsc --module commonjs --target es5 --outFile app.js TypeScript1.ts app.ts

请注意--outFile选项。

答案 1 :(得分:0)

我相信几乎没有问题(假设是TypeScript 1.5 +):

首先:/// <reference path="TypeScript1.ts" />

应该是:import MyModule from "./TypeScript1";

第二,我相信你需要export module MyModule

或者你可以改变

   module MyModule {
       export class Calculator {
           add(x: number, y: number): number {
               return x + y;
           };
           constructor() { }
       }
   }

       export default class Calculator {
           add(x: number, y: number): number {
               return x + y;
           };
           constructor() { }
       }

然后import Calculator from "./TypeScript1";

或者替代

       export class Calculator {
           add(x: number, y: number): number {
               return x + y;
           };
           constructor() { }
       }

然后import {Calculator} from "./TypeScript1";

分别取决于您选择的上述哪一项。

第一个创建Calculator类作为主要导出,如果计算器是您计划保留在文件中的主要内容,则有用,如果您计划在文件中有多个同等重要的内容,则第二个非常有用。 / p>

此外,模块关键字通常不再使用,而是使用namespace关键字,因为模块关键字过于混乱,太多人将其与文件导入模块混淆。

答案 2 :(得分:0)

命名空间无需引用即可工作... 我用过这样的东西......

sript1.ts

namespace A{
      class AA{
           var x:number;
           constructor(x:number){
                  this.x=x;
           }
      }
}

script2.ts

var y:A.AA = new A.AA(3);

即使文件位于项目的不同文件夹中,命名空间也能正常工作。我没有引用或导入任何东西。

答案 3 :(得分:0)

It's now Christmas 2017 and they still haven't fixed this >:(. Alexanders solution is correct. For "Visual Studio Code" use the following in your tsconfig.json file:

"compilerOptions": {
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true,
  "module": "system",
  "outFile": "bundle.js",
  "target": "es5"
},

You then run your bundled file "node bundle".