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
- https://www.julienpradet.fr/tutoriels/typescript-bonnes-pratiques/
- https://www.julienpradet.fr/tutoriels/typescript-types-avances/
Les règles des guidelines JavaScript s'appliquent également ici.
- Valider le code avec eslint ainsi que typescript-eslint.
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>
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).