Brug af eksterne moduler i TypeScript
Lad os sige, at vi har de følgende 2 eksterne moduler i TypeScript:
export module My.Services.Common
{
export class Helper
{
//...
}
}
og
export module My.Services
{
export class Connection
{
//...
}
}
Nu i min app.ts vil jeg gerne bruge både Connection og Helper klasserne. Det, jeg ønsker at opnå, ligner følgende kode i C#:
using My.Services;
using My.Services.Common;
Eller i det mindste bare
using My.Services;
Men det ser ud til, at jeg ikke kan arbejde samtidig med både Helper og Connection. Hvis jeg skriver:
import {My} from './services/common/Helper';
import {My} from './services/Connection;
Fører til fejlen "duplikeret identifikator 'My'". Det er dog logisk. Så mit spørgsmål er, hvordan kan jeg bruge forskellige klasser fra de samme (eller indlejrede) moduler?
Svar #1
Min personlige opfattelse af dette er at bryde væk fra det, du ser i C# eller Java (som mere svarer til interne moduler) og behandle det mere som de eksterne moduler, du bruger...
Trin 1. Drop module-nøgleordet. Filen er allerede et modul.
Trin 2. Angiv et alias uden punktum, når du importerer.
Trin 3. Du kan nu importere alt, '*' eller specifikke klasser, når du importerer.
./services/common.ts
export class Helper
{
//...
}
./tjenester.ts
export class Connection
{
//...
}
./app.ts
import * as Services from './services'
import { Connection } from './services/common'
var x = new Services.Helper();
var y = new Connection();
Du kan også importere flere medlemmer fra et modul:
import { Connection, Example } from './services/common'
var y = new Connection();
var z = new Example();
Svar #2
For at tilføje til Steves gode svar, da jeg allerede har tegnet ASCII-kunsten: Det øverste objekt, der eksporteres fra denne modul, My, flettes ikke med noget andet objekt fra andre filer med navnet My. Det eneste, som My.Services.Common-modulet opnår, er at gøre det mere besværligt at importere Helper, fordi du skal fuldt kvalificere navnet selv om der ikke er noget andet derinde.
Hvad du tror, du har gjort:
/-My--------------------\
| /-Services---------\ |
| | /-Common---\ | |
| | | [Helper] | | |
| | \----------/ | |
| | | |
| | [Connection] | |
| \------------------/ |
\-----------------------/
Hvad du faktisk har gjort:
/-My---------------\ /-My---------------\
| /-Services-----\ | | /-Services-----\ |
| | /-Common---\ | | | | [Connection] | |
| | | [Helper] | | | | \--------------/ |
| | \----------/ | | \------------------/
| \--------------/ |
\------------------/
Dette er som at have et organiseringssystem i dit hus, hvor du har et dusin skotøjsæsker, hver med en enkelt mindre æske indeni, hver med en mindre æske indeni den. De indlejrede æsker giver ingen organisatorisk fordel i forhold til skotøjsæskerne!
