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

问题描述 投票:3回答:4

我得到了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)

我做错了什么?

node.js visual-studio namespaces typescript
4个回答
0
投票

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

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

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

请注意--outFile选项。


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类作为主要导出,如果计算器是您计划保留在文件中的主要内容,则有用,如果计划在文件中有多个同等重要的内容,则第二个非常有用。

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


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);

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


0
投票

它现在是2017年圣诞节,他们仍然没有解决这个问题:(。Alexanders解决方案是正确的。对于“Visual Studio Code”,请在tsconfig.json文件中使用以下内容:

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

然后,运行捆绑文件“node bundle”。

© www.soinside.com 2019 - 2024. All rights reserved.