我正在尝试使用命名空间在类中使用构造函数,但每次我想将对象推入数组时,我都会得到一个typerror,当我不使用命名空间时就不会发生这种情况
为什么我只是因为使用命名空间而得到这个错误?
这些是我的测试类
1.ts
namespace pruebas {
export class User {
private _name: string;
private _ape: string;
constructor(name,ape){
this._name = name;
this._ape = ape;
}
get name(): string {
return this._name;
}
set name(value: string) {
this._name = value;
}
get ape(): string {
return this._ape;
}
set ape(value: string) {
this._ape = value;
}
}
}
2.ts
///<reference path="1.ts"/>
namespace pruebas {
import pr = pruebas.User;
let us = new User(`saresease`, `ssfse`);
let vw = new User(`ghrebbre`, `bnerev`);
let r =[]
r.push(us,vw);
console.log(r)
}
这是错误
var us = new pruebas.User("saresease", "ssfse");
^
TypeError: pruebas.User is not a constructor
at pruebas (C:\Users\Downloads\ts project\src\testnames\2.js:4:14)
at Object.<anonymous> (C:\Users\Downloads\ts project\src\testnames\2.js:9:3)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
答案 0 :(得分:0)
您需要使用--outFile
进行编译才能实现此目的。
更一般地说,由于您正在运行节点进程,因此您不应该将内容放入全局命名空间,因为这不会真正起作用很长时间(只要您需要{ {1}}其他一些事情,这一切都崩溃了)。使用顶级import
和export
声明来共享文件之间的组件。
答案 1 :(得分:0)
1.在 1.ts 中导出名称空间。
export = pruebas;
2.使用 2.ts 中的 import = require(..)导入名称空间。
import pruebas=require("./1.ts");
你必须编译 2.ts &amp; 1.ts 到一个脚本文件中。如果将 1.ts 定义为全局库和模块,则必须通过选项指定模块加载器 - 使用
tsc
将.ts编译成单个.js文件时,module = amd / - module = system 。
使用triple-slash指令在 2.ts 中定义您的依赖关系。
///<reference path="./1.ts"/>;
使用tsc --outFile 2.js <srcRoot>/2.ts
编译2.ts,然后在浏览器中添加js,您可以看到结果。如果您想查看详细信息,let's go!!!