javascript - Använda namnutrymme spritt över flera modulfiler i TypeScript


Jag har börjat arbeta på ett storskaligt TypeScript-projekt.

Redan från början vill jag hålla mina filer organiserade (detta projekt kommer att delas mellan många utvecklare, så ordning är mycket nödvändig).

Jag har försökt använda moduler/namnrymder och dela upp klasser i separata filer för var och en, med en mapp som håller namnrymden.

Filstrukturen är:

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

Jag försöker sedan importera alla filer i det namnområdet i app.ts med något liknande: import * as Animals from "./Classes/Animals"

När det gäller själva namespace-filerna har jag försökt följande, utan framgång:

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

och också:

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

Tyvärr känns sökvägen aldrig igen (eftersom den pekar på en mapp och inte på en enskild fil). Är detta ens möjligt? Att ha alla mina klasser från ett enda namnrymd i en fil skulle resultera i filer som är tusentals rader långa och för det här projektet är det inte hållbart.

Jag har också märkt att TypeScript 1.5 har stöd för tsconfig.json - men att behöva lägga till varje fil manuellt i kartan är ett säkert sätt att introducera problem när utvecklare börjar lägga till klasser.

OBS: Jag använder Visual Studio 2015, TypeScript 1.5 (tror jag, är inte säker på hur man verifierar). Jag har också ES6-stöd aktiverat.

Svar #1

Använd omexportering för att skapa en extern modul som grupperar och exponerar typer från andra moduler:

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

Importera sedan typerna från den nya modulen som vanligt:

// app.ts
import * as Animals from '.\Classes\Animals'

let dog: Animals.Dog;
let snake: Animals.Snake;

Eller

// app.ts
import { Dog, Snake } from '.\Classes\Animals'

let dog: Dog;
let snake: Snake;

Svar #2

Hittade ett sätt att uppnå ditt mål men inte med nyckelordet namespace.

  1. Klasserna "Animals", Animal.ts & Mammal.ts & Reptile.ts under namnrymd.
  2. med index.ts för tunnan.
  3. animals.ts för namnrymdsgruppering.

Exempelklasser:

index.ts (som fat)

animals.ts (för namnområdesgruppering)

Och här är du med konceptet av namnrymden.

Relaterade artiklar