-
Notifications
You must be signed in to change notification settings - Fork 11
Coding style React & TS
- faire un type explicite pour les props de ses composants et toujours l'exporter
- pour les composants et pages, utiliser une fonction fléchée, ex: const Compo = () => {} (histoire de standardiser) et ne plus utiliser FC/FunctionalComponent
export const Compo = (props: Props) => <div>coucou</div>;- pour les pages, bien utiliser (pour l'instant) le type
NextPageWithLayoutqui permettra de typer correctement la fonctiongetLayoutsans vous casser le crâne à le faire vous même ; et exporter la page ensuite.
const MaPage: NextPageWithLayout = () => {}
// getLayout prend des children maintenant comme si c'était un composant normal
MaPage.getLayout = ({children}) => <BasicLayout>{children}</BasicLayout>;
export default MaPage;-
favoriser
import { useState } from "react";au lieu deReact.useState -
ne pas faire
import star => import * as React from "react";🙅 -
si un composant n'a que children en props, utiliser
PropsWithChildren; aussi plus besoin de lui passer un type objet vide en genericPropsWithChildren<{}>, c'est maintenant pas défaut -
limiter vraiment au maximum l'utilisation de
any. Dans un catch par exemple, il faut typer l'erreur enunknownet caster ou guarder ensuite en fonction de comment on l'utilise. Si jamais dans d'autres casanyest vraiment indispensable (dans un type complexe par exemple, ou dans un type extend) utiliserAny(avec un majuscule) venant de@common/utils/type. -
toujours renvoyer une error et pas autre chose (car JS peut throw n'importe quoi)
Exemple de gestion des erreurs dans un catch :
try {
await compute();
} catch (error: unknown) {
if(typeof error === "string") { // bad practice
// message error
handleMessageError(error);
} else if (error instanceof PasContentError) {
// known error
handleBusinessError(error);
} else if (error instanceof Error) {
// other type of js error
handleUnknownError(error);
} else console.error("bad error object", error);
}