我的命名空间未定义。打字稿
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的命名空间未定义。打字稿相关的知识,希望对你有一定的参考价值。
我得到了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:UsersUserDocumentsVisual Studio 2015ProjectsNodejsConsoleApp1NodejsConsoleApp1app.js:8:15)
我做错了什么?
如果它包含来自app.js
文件的代码,我会检查TypeScript1.ts
内容。我的猜测是它没有。
您可以按如下方式运行tsc
来修复它:
tsc --module commonjs --target es5 --outFile app.js TypeScript1.ts app.ts
请注意--outFile
选项。
我相信几乎没有问题(假设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关键字,因为模块关键字过于混乱,太多人将其与文件导入模块混淆。
命名空间甚至没有引用工作......我使用过这样的东西......
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);
即使文件位于项目的不同文件夹中,命名空间也可以工作。我没有引用或导入任何东西。
它现在是2017年圣诞节,他们仍然没有解决这个问题:(。Alexanders解决方案是正确的。对于“Visual Studio Code”,请在tsconfig.json文件中使用以下内容:
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "system",
"outFile": "bundle.js",
"target": "es5"
},
然后,运行捆绑文件“node bundle”。
以上是关于我的命名空间未定义。打字稿的主要内容,如果未能解决你的问题,请参考以下文章
打字稿:引用 Vuex 存储模块会导致 VueJs 2.5 的命名空间错误