在Typescript中使用命名空间的构造函数错误

时间:2017-03-13 23:35:49

标签: javascript typescript

我正在尝试使用命名空间在类中使用构造函数,但每次我想将对象推入数组时,我都会得到一个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)

2 个答案:

答案 0 :(得分:0)

您需要使用--outFile进行编译才能实现此目的。

更一般地说,由于您正在运行节点进程,因此您不应该将内容放入全局命名空间,因为这不会真正起作用很长时间(只要您需要{ {1}}其他一些事情,这一切都崩溃了)。使用顶级importexport声明来共享文件之间的组件。

另见How do I use namespaces with TypeScript external modules?

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

  1. 使用triple-slash指令在 2.ts 中定义您的依赖关系。

    ///<reference path="./1.ts"/>;
    
  2. 使用tsc --outFile 2.js <srcRoot>/2.ts编译2.ts,然后在浏览器中添加js,您可以看到结果。如果您想查看详细信息,let's go!!!