Aller au contenu principal

Modules (export/import)

Jusqu'à maintenant, nous avons mis l'entièreté du code dans un fichier main.ts. Il serait plus élégant de déplacer les détails relatifs à la classe Position dans son propre fichier position.ts

position.ts
class Position {

constructor(private x: number, private y: number, private z: number) { }

equals(position: Position): boolean {
return this.x == position.x && this.y == position.y && this.z == position.z;
}
}
main.ts
let p1 = new Position(2, 2, 1);
let p2 = new Position(3, 3, 1);

console.log(p1.equals(p2)); // false

Si vous essayez de compiler votre fichier main, vous aurez une erreur comme quoi Cannot find name 'Position'

Premièrement, il faut rendre disponible Position pour être utilisé à l'extérieur de son fichier, c'est-à-dire qu'il faut rendre la classe exportable.

position.ts
export class Position {

constructor(private x: number, private y: number, private z: number) { }

equals(position: Position): boolean {
return this.x == position.x && this.y == position.y && this.z == position.z;
}
}

Ensuite, dans main.ts, il faut importer la référence à Position

main.ts
import { Position } from "./position";

let p1 = new Position(2, 2, 1);
let p2 = new Position(3, 3, 1);

console.log(p1.equals(p2)); // false
remarque

À noter que dans le chemin vers le fichier, on exclut la portion .ts. De plus, il est possible de définir plusieurs éléments entre les accolades, dans le cas où le fichier position.ts exporterait plusieurs définitions.