modules.md 3.6 KB

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.

"Classic"

"./person" dans /Source/Multimath/player.ts

  1. /Source/Multimath/person.ts
  2. /Source/Multimath/person.d.ts (type definition file)

"person" dans /Source/Multimath/player.ts

  1. /Source/Multimath/person.ts
  2. /Source/Multimath/person.d.ts
  3. /Source/person.ts
  4. /Source/person.d.ts
  5. /person.ts
  6. /person.d.ts

"Node"

"./person" dans /Source/Multimath/player.ts

  1. /Source/Multimath/person.ts
  2. /Source/Multimath/person.tsx (equivalent de JSX en TS)
  3. /Source/Multimath/person.d.ts (type definition file)
  4. /Source/Multimath/person/package.json: s'il existe une propriété typings pointant vers un fichier, l'utiliser
  5. /Source/Multimath/index.ts
  6. /Source/Multimath/index.tsx
  7. /Source/Multimath/index.d.ts

"person" dans /Source/Multimath/player.ts

  1. /Source/Multimath/node_modules/person.ts
  2. /Source/Multimath/node_modules/person.tsx
  3. /Source/Multimath/node_modules/person.d.ts
  4. /Source/Multimath/node_modules/person/package.json#typings (?)
  5. /Source/Multimath/node_modules/@types/*ts[x] (?)
  6. /Source/Multimath/node_modules/index.ts
  7. /Source/Multimath/node_modules/index.tsx
  8. /Source/Multimath/node_modules/index.d.ts
  9. /Source/node_modules/person.ts
  10. /Source/node_modules/person.tsx
  11. /Source/node_modules/person.d.ts
  12. /Source/node_modules/person/package.json#typings
  13. /Source/node_modules/@types/*ts[x] (?)
  14. /Source/node_modules/index.ts
  15. /Source/node_modules/index.tsx
  16. /Source/node_modules/index.d.ts
  17. /node_modules/person.ts
  18. /node_modules/person.tsx
  19. /node_modules/person.d.ts
  20. /node_modules/person/package.json#typings
  21. /node_modules/@types/*ts[x] (?)
  22. /node_modules/index.ts
  23. /node_modules/index.tsx
  24. /node_modules/index.d.ts
  25. Then start again with .js extension instead of .ts[x].