ES6-moduler: Bæredygtigheden af TypeScript interne moduler og pakker


Fuldstændige navne på klasser i TypeScript

TypeScript 1.X giver udvikleren mulighed for at bruge interne moduler som navneområder.

module MyProject.MySubProject {
    export class A {
    }
    export function f() {
        var a1 = new A(); // valid
        var a2 = new MySubProject.A(); // valid too
        var a3 = new MyProject.MySubProject.A(); // valid too, again
    }
}
MyProject.MySubProject.f();
var a4 = new MyProject.MySubProject.A(); // ... and valid

Når denne kode transpileres til ES5, opretter den et objekt MyProject, som indeholder et objekt MySubProject, der indeholder to funktioner A og f.

Inde i modulet kan en klasse designes med et relativt navn (A, MySubProject.A) eller det fulde navn (MyProject.MySubProject.A). Ude fra modulet bruges den eksporterede klasse med det fulde navn.

Men indlejrede moduler eksisterer ikke længere i ES6. Og TypeScript vil tilpasse sig ES6-modulerne.

Er de fulde navne på klasser (MyModule1.MyModule2.MyClass) kompatible med ES6?

Hvis vi vil bruge navnerum på den gamle måde, kan vi så erklære en ES6-klasse i en closure eller et objekt?

Bundles og ES6-moduler

Her er en lignende kode på ES6-måden:

//------ MyProject/MySubProject.js ------
export class A {
}
export function f() {
    var a1 = new A(); // valid
}

//------ main.js ------
import { A, f } from 'MyProject/MySubProject';
f();
var a2 = new A();

Efter sammenkædning af de to JavaScript-filer til en enkelt minificeret fil, hvordan bruges import?

Svar #1

TypeScript vil kun tilpasse sig ES6-moduler som en ny syntaks baseret på TypeScript eksterne moduler. Dette er baseret på det arbejde, der udføres på GitHub. Nuværende interne moduler er ikke i konflikt med den nye syntaks og vil derfor fortsætte med at fungere som de gør.

Relaterede artikler