Estoy tratando de usar constructores dentro de una clase usando el espacio de nombres, pero cada vez que quiero insertar un objeto en una matriz, obtengo un error de tipeo, esto no sucede cuando no estoy usando el espacio de nombres

¿Por qué recibo este error solo por usar el espacio de nombres?

Estas son mis clases de prueba

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

Este es el error

    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
Lrawls 14 mar. 2017 a las 02:35

2 respuestas

La mejor respuesta

Necesita compilar con --outFile para que esto funcione.

En términos más generales, dado que está ejecutando un proceso de nodo, no debería poner las cosas en el espacio de nombres global, ya que esto realmente no funcionará por mucho tiempo (tan pronto como necesite import alguna otra cosa, esto todo se desmorona). Utilice declaraciones de nivel superior export y import para compartir componentes entre archivos.

Consulte también ¿Cómo uso espacios de nombres con módulos externos TypeScript?

0
Community 23 may. 2017 a las 12:17

Puede usar el espacio de nombres en un módulo después de exportarlo.

1.exportar el espacio de nombres en 1.ts .

export = pruebas;

2. Importe el espacio de nombres usando import = require (..) en 2.ts .

import pruebas=require("./1.ts");

Puede usar el espacio de nombres como biblioteca global.

debe compilar 2.ts y 1.ts en un solo archivo de secuencia de comandos. si define 1.ts como biblioteca global y como módulo , debe especificar un cargador de módulos a través de la opción --module = amd / --module = system cuando utilice tsc compilar .ts en un solo archivo .js .

  1. utilizando la directiva de triple barra para definir su dependencia en 2.ts .

    ///<reference path="./1.ts"/>;
    
  2. compile los 2.ts con tsc --outFile 2.js <srcRoot>/2.ts, luego agregue los js en el navegador para ver el resultado. si desea ver los detalles, ¡vamos!

0
holi-java 14 mar. 2017 a las 04:19