# Modules selon les versions * avant TypeScript 1.5 * 2 types de modules: internes et externes * utilisé pour des besoins différents mais avec le même nom * TypeScript 1.5 * les modules internes deviennent des "namespaces" * les modules externes deviennent des "modules" tout court * support de la syntaxe ES2015 import/export | Modules | Namespaces | |-----------------------------|--------------------| | organisent le code | organisent le code | | génération dans divers formats, pour les chargeurs | aucun chargeur nécessaire, utilise --outFile | | support natif dans Node au format CommonJS | aucun chargeur nécessaire, utilise --outFile | | support browser par des chargeurs séparés: Require.JS / System.JS | ne polluent pas l'espace de noms global | | syntaxe ES2015 | optimaux pour de petites applications client | | facilitent la réutilisation | | | l'avenir | | ## Formats de modules et Chargeurs * TS peut émettre CommonJS (CJS), Asynchronous Module Definition (AMD) et Universal Module Definition (UMD), ainsi que `system` le format de System.JS, et ES2015. * Le code au format UMD, qui est une combinaison de CJS et AMD, peut être chargé par Node et les chargeurs AMD * Node utilise nativement CommonJS * SystemJS supporte CJS, AMD, ES2015 (ES6), et un format propre `system` * RequireJS ne supporte qu'AMD * Ces chargeurs étaient plus pertinents en 2016 (date du cours) qu'en 2018, où Webpack a essentiellement tout remplacé dans ce domaine en combinant le chargement et l'optimisation. # Résolution des modules dans TS 2.2.x Apparemment pas tout à fait correcte: il y a aussi utilisation de `node_modules/@types` pour les imports sans chemin. Apparemment, c'est un changement quelque part entre 1.6.x et 2.2.x : en 2018, on n'utilise plus `tsd` ni `typings` mais les composants `@types/(package)`, installés par `npm`/`yarn`. https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types ## "Classic" ### "./person" dans /Source/Multimath/player.ts 1. `/Source/Multimath/person.ts` 1. `/Source/Multimath/person.d.ts` (type definition file) ### "person" dans /Source/Multimath/player.ts 1. `/Source/Multimath/person.ts` 1. `/Source/Multimath/person.d.ts` 1. `/Source/person.ts` 1. `/Source/person.d.ts` 1. `/person.ts` 1. `/person.d.ts` ## "Node" ### "./person" dans /Source/Multimath/player.ts 1. `/Source/Multimath/person.ts` 1. `/Source/Multimath/person.tsx` (equivalent de JSX en TS) 1. `/Source/Multimath/person.d.ts` (type definition file) 1. `/Source/Multimath/person/package.json`: s'il existe une propriété `typings` pointant vers un fichier, l'utiliser 1. `/Source/Multimath/index.ts` 1. `/Source/Multimath/index.tsx` 1. `/Source/Multimath/index.d.ts` ### "person" dans /Source/Multimath/player.ts 1. `/Source/Multimath/node_modules/person.ts` 1. `/Source/Multimath/node_modules/person.tsx` 1. `/Source/Multimath/node_modules/person.d.ts` 1. `/Source/Multimath/node_modules/person/package.json#typings` (?) 1. `/Source/Multimath/node_modules/@types/*ts[x]` (?) 1. `/Source/Multimath/node_modules/index.ts` 1. `/Source/Multimath/node_modules/index.tsx` 1. `/Source/Multimath/node_modules/index.d.ts` 1. `/Source/node_modules/person.ts` 1. `/Source/node_modules/person.tsx` 1. `/Source/node_modules/person.d.ts` 1. `/Source/node_modules/person/package.json#typings` 1. `/Source/node_modules/@types/*ts[x]` (?) 1. `/Source/node_modules/index.ts` 1. `/Source/node_modules/index.tsx` 1. `/Source/node_modules/index.d.ts` 1. `/node_modules/person.ts` 1. `/node_modules/person.tsx` 1. `/node_modules/person.d.ts` 1. `/node_modules/person/package.json#typings` 1. `/node_modules/@types/*ts[x]` (?) 1. `/node_modules/index.ts` 1. `/node_modules/index.tsx` 1. `/node_modules/index.d.ts` 1. Then start again with `.js` extension instead of `.ts[x]`.