Guidelines : TypeScript

Ce document rassemble les bonnes pratiques appliquées par l'agence web Alsacreations.fr concernant "TypeScript". Ces indications sont destinées à évoluer dans le temps et à s'adapter à chaque nouveau projet.

🕹️ Pour s'entraîner : https://github.com/type-challenges/type-challenges

Généralités

Les règles des guidelines JavaScript s'appliquent également ici.

Syntaxe et nommage

Types et interfaces

Utiliser des types plutôt que des interfaces quand cela est possible pour réduire au maximum l'utilisation de deux mots clés différents, sachant que type est plus versatile.

Commencer chaque type par une majuscule.

type MaybeDate = Date | String

type Post = {
  title: string,
  content: string,
  published_on: MaybeDate
}

type GetPost = () => Promise<Post>

Fonctions

Typer les paramètres d'une fonction, et au maximum du possible typer le retour des fonctions.

Lire TypeScript Function Types: A Beginner's Guide

Utiliser JSDoc pour expliquer le role de la fonction et de ses paramètres. Il ne faudra cependant pas indiquer les types avec JSDoc mais TS uniquement.

/**
 * Récupère un post
 *
 * @param id L'id du post
 */
const getPost = (id: string): Promise<Post>  => { ... }

const obj = {
  /**
   * Récupère un post
   *
   * @param id L'id du post
   */
  getPost(id: string): Promise<Post> {
    ...
  }
}

Écrire les fonctions de manière à ce qu'elles soient le plus "type safe".

type ExampleFn = <
  T extends Record<string, any>, // T doit étendre un objet
  K extends keyof T // K étendra une des clés de T
>(obj: T, key: K) => T[K]

De cette façon, il n'y a aucune marge d'erreur possible et K est obligé d'exister dans les clés de T (en plus de proposer une autocomplétion).