tutorial objetos node lista example javascript typescript typescript1.5

javascript - objetos - Usando espacio de nombres repartidos en mĂșltiples archivos en TypeScript



typescript example (3)

Encontró una manera de lograr su objetivo pero no con la palabra clave del espacio de nombres.

  1. Las clases "Animales", Animal.ts & Mammal.ts & Reptile.ts bajo espacio de nombres.
  2. Con index.ts para barril.
  3. animals.ts para agrupar espacios de nombres.

Clases de muestra:

index.ts (como barril)

animals.ts (para agrupación de espacio de nombres)

Y aquí va el concepto de espacio de nombres.

He comenzado a trabajar en un proyecto de escritura a gran escala.

Desde el principio, quiero mantener mis archivos organizados (este proyecto se dividirá entre muchos desarrolladores, por lo que el orden es muy necesario).

He estado intentando usar módulos / espacios de nombres y dividiendo las clases en archivos separados para cada uno, con una carpeta que contiene el espacio de nombres.

La estructura del archivo es:

app.ts /Classes ---- /Animals ---- ---- Mammals.ts ---- ---- Reptiles.ts

Luego intento importar todos los archivos en ese espacio de nombres en app.ts usando algo como: import * as Animals from "./Classes/Animals"

En cuanto a los archivos de espacio de nombres, he intentado lo siguiente, sin éxito:

namespace Animals { export class Mammals { constructor() { } } }

y también:

module Animals { export class Reptiles { constructor() { } } }

Desafortunadamente, la ruta nunca se reconoce (ya que apunta a una carpeta y no a un solo archivo). ¿Es esto posible? Tener todas mis clases de un solo espacio de nombres en un archivo resultará en archivos de miles de líneas y para este proyecto que no se puede mantener.

También he notado que TypeScript 1.5 tiene soporte para tsconfig.json ; sin embargo, tener que agregar cada archivo manualmente al mapa es una forma segura de presentar problemas cuando los desarrolladores comienzan a agregar clases.

NOTA: Estoy usando Visual Studio 2015, TypeScript 1.5 (creo, no estoy seguro de cómo verificar). También tengo el soporte ES6 activado.


Los módulos externos implican que usted carga los módulos archivo por archivo. Tanto AMD como CommonJS no tienen tal cosa como espacio de nombres. Puede utilizar algún tipo de procesamiento posterior para agrupar archivos en un módulo.

Lo siguiente define un módulo interno:

module Animals { export class Reptiles { constructor() { } } }

Usted no debe utilizar la import para ello. Animals.Reptiles es visible en cualquier lugar. El único objetivo es cargar los scripts en el orden correcto (por ejemplo, clases base antes que los herederos). Así que debes listar todos los archivos en ts.config o en algún otro lugar. En mi proyecto, uso paquetes en carpetas y tengo una convención para agregar @ a los nombres de archivo de las clases base.

Otra solución es utilizar módulos externos: AMD ( RequireJS ) o CommonJS ( Browserify ). En ese caso retire el module nivel superior de la declaración. Si un archivo contiene solo un tipo, puede exportarlo como una raíz:

class Reptiles { constructor() { } } export = Reptiles;

Puede referirse módulo por ruta de archivo:

import Reptilies = require(''../Animals/Reptilies'') var reptile = new Reptile();

O con nuevos módulos ES6:

export class Reptiles { constructor() { } }

import { Reptiles } from ''../Animals/Reptilies'';


Utilice la reexportación para crear un módulo externo que agrupa y expone tipos de otros módulos:

// Classes/Animals.ts export * from ''./Animals/Mammals''; export * from ''./Animals/Reptiles'';

Luego importa los tipos del nuevo módulo como de costumbre:

// app.ts import * as Animals from ''./Classes/Animals'' let dog: Animals.Dog; let snake: Animals.Snake;

O

// app.ts import { Dog, Snake } from ''./Classes/Animals'' let dog: Dog; let snake: Snake;