Menu
Coddy logo textTech

Antisèche TypeScript

Dernière mise à jour

Types de base

Les types primitifs et comment annoter les variables.

OpérationSyntaxe
Chaîne (string)let name: string = "Ada";
Nombrelet age: number = 25;
Booléenlet ok: boolean = true;
Tableau de Tlet xs: number[] = [1, 2, 3];
Tableau génériquelet xs: Array<string> = [];
Tuplelet pair: [string, number] = ["a", 1];
Any (désactive le typage)let x: any = 1;
Unknown (any sécurisé)let x: unknown = JSON.parse(s);
Void (sans retour)function log(): void { … }
Never (ne retourne jamais)function fail(): never { throw … }
Null / undefinedlet n: null = null;

Inférence et annotations de type

Quand laisser TS inférer et quand annoter.

OpérationSyntaxe
Inféré depuis la valeurlet count = 0; // number
Annotation explicitelet count: number = 0;
Paramètre de fonctionfunction add(a: number, b: number) { … }
Type de retourfunction add(a: number, b: number): number { … }
Fonction fléchéeconst sq = (x: number): number => x * x;
Assertion de typeconst el = input as HTMLInputElement;
Assertion const (literal)const dirs = ["up", "down"] as const;
Assertion non-nullel!.focus();

Interfaces

Décris la forme d'un objet.

OpérationSyntaxe
Déclarerinterface User { id: number; name: string; }
Propriété optionnelleinterface User { age?: number; }
Propriété readonlyinterface User { readonly id: number; }
Signature de méthodeinterface Logger { log(msg: string): void; }
Étendre une autre interfaceinterface Admin extends User { role: string; }
Signature d'indexinterface Map { [key: string]: number; }
Implémenter dans une classeclass Db implements Logger { … }

Alias de type et unions

Nomme un type et combine des types avec | et &.

OpérationSyntaxe
Alias de typetype ID = string | number;
Alias d'objettype User = { id: number; name: string };
Type uniontype Status = "idle" | "loading" | "done";
Type intersectiontype Admin = User & { role: string };
Type littéraltype Yes = "yes";
Nullabletype Maybe<T> = T | null | undefined;
Alias de fonctiontype Handler = (e: Event) => void;

Fonctions

Paramètres typés, retours et surcharges.

OpérationSyntaxe
Paramètre optionnelfunction greet(name?: string) { … }
Paramètre par défautfunction greet(name = "friend") { … }
Paramètres restfunction sum(...ns: number[]): number { … }
Type de fonctionlet fn: (a: number) => number;
Interface appelableinterface Fn { (x: number): number; }
Signatures de surchargefunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
Retour void ignoréconst cb: () => void = () => 42; // ok

Classes

Classes avec modificateurs d'accès et propriétés de paramètre.

OpérationSyntaxe
Déclarer une classeclass User { name: string; }
Constructeurconstructor(name: string) { this.name = name; }
Propriété de paramètreconstructor(public name: string) {}
Public / private / protectedprivate id: number;
Champ readonlyreadonly id: number;
Membre statiquestatic count = 0;
Getter / setterget name() { return this._name; }
Héritageclass Admin extends User { … }
Classe abstraiteabstract class Shape { abstract area(): number; }

Génériques

Types réutilisables paramétrés par d'autres types.

OpérationSyntaxe
Fonction génériquefunction id<T>(x: T): T { return x; }
Appeler avec type expliciteid<string>("hi");
Interface génériqueinterface Box<T> { value: T; }
Alias génériquetype Pair<A, B> = [A, B];
Classe génériqueclass Stack<T> { items: T[] = []; }
Contrainte avec extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
Paramètre de type par défautinterface Box<T = string> { value: T; }
Opérateur keyoftype K = keyof User; // "id" | "name"
Accès par indextype Name = User["name"];

Narrowing

Réduire une union à un seul type à l'exécution.

OpérationSyntaxe
Vérification typeofif (typeof x === "string") { … }
Vérification instanceofif (e instanceof Error) { … }
Opérateur inif ("name" in obj) { … }
Narrowing par égalitéif (status === "done") { … }
Par véracitéif (value) { … }
Type guard personnaliséfunction isUser(x: any): x is User { return "id" in x; }
Union discriminéetype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
Exhaustivité avec neverconst _: never = shape;

Enums

Ensembles nommés de constantes.

OpérationSyntaxe
Enum numériqueenum Direction { Up, Down, Left, Right }
Enum de chaînesenum Status { Idle = "IDLE", Done = "DONE" }
Utiliser une valeurlet d: Direction = Direction.Up;
Const enum (inliné)const enum Color { Red, Green, Blue }
Union de littéraux (moderne)type Status = "idle" | "done";

Utility types

Helpers intégrés qui transforment des types existants.

OpérationSyntaxe
Toutes les props optionnellesPartial<User>
Toutes les props requisesRequired<User>
Toutes les props readonlyReadonly<User>
Sélectionner un sous-ensemble de clésPick<User, "id" | "name">
Omettre une ou plusieurs clésOmit<User, "password">
Objet avec clés donnéesRecord<string, number>
Exclure d'une unionExclude<"a" | "b" | "c", "a">
Ne garder qu'une unionExtract<"a" | "b", "a" | "c">
Retirer null / undefinedNonNullable<string | null>
Type de retour de fonctionReturnType<typeof fn>
Tuple des paramètresParameters<typeof fn>
Type de promesse résolueAwaited<Promise<string>>

Modules

Importer et exporter entre fichiers.

OpérationSyntaxe
Export nomméexport function add(a: number, b: number) { … }
Export par défautexport default class User { … }
Ré-exporterexport { User } from "./user";
Import nomméimport { add } from "./math";
Import par défautimport User from "./user";
Import de type uniquementimport type { User } from "./user";
Tout importerimport * as math from "./math";
Référence triple-slash/// <reference types="node" />

tsconfig essentiel

Les flags du compilateur à connaître.

OptionEffet
"strict": trueActive toutes les vérifications strictes (recommandé).
"target": "ES2022"Version JavaScript que tsc émet.
"module": "ESNext"Système de modules dans la sortie.
"moduleResolution": "bundler"Résout les modules comme les bundlers modernes.
"jsx": "react-jsx"Active JSX pour React 17+.
"esModuleInterop": trueImports par défaut plus propres depuis CommonJS.
"skipLibCheck": trueSaute le typage de node_modules (build plus rapide).
"noEmit": trueVérification de types uniquement — le bundler émet la sortie.

La syntaxe TypeScript que tu utilises le plus, sur une seule page. Cette antisèche TypeScript est une référence rapide pour le quotidien en TS : types de base, interfaces, alias de type, génériques, unions, narrowing et les utility types intégrés.

Tout ici est du TypeScript standard qui se compile avec tsc et tourne partout où le JavaScript moderne fonctionne. Copie ce dont tu as besoin ou essaie n'importe quel extrait en direct dans le playground TypeScript — rien à installer.

FAQ antisèche TypeScript

Cette antisèche TypeScript est-elle gratuite ?
Oui. Cette antisèche TypeScript est entièrement gratuite, sans inscription. Mets-la en favori et reviens quand tu as besoin de consulter un type, une interface ou un utility type.
Quelle est la différence entre une interface et un alias de type ?
Les deux peuvent décrire la forme d'un objet et, dans la plupart des cas du quotidien, sont interchangeables. Les interfaces peuvent être rouvertes et étendues entre fichiers (declaration merging), ce qui est utile pour les types de bibliothèques. Les alias de type peuvent nommer des unions, intersections, tuples et mapped types — des formes que tu ne peux pas exprimer avec interface. Règle courante : utilise interface pour les formes d'objet publiques et type pour les unions, tuples et types calculés.
Quelle est la différence entre any et unknown ?
any désactive complètement la vérification de types — le compilateur te laisse tout faire avec. unknown est sûr : tu dois le restreindre (avec typeof, instanceof ou un type guard) avant de l'utiliser. Préfère unknown pour les valeurs venant de sources externes comme JSON.parse ou fetch — il t'oblige à valider avant utilisation.
Dois-je apprendre JavaScript avant TypeScript ?
Oui — TypeScript est du JavaScript avec un système de types par-dessus, donc toute compétence JS est réutilisée. Si tu construis encore les bases JS (tableaux, objets, async/await), l'antisèche JavaScript est un bon point de départ et le cours JavaScript gratuit de Coddy couvre les mêmes notions de façon interactive.
Puis-je pratiquer TypeScript en ligne ?
Oui. Ouvre le playground TypeScript pour exécuter n'importe quel extrait de cette antisèche dans ton navigateur — rien à installer. Quand tu veux de la structure, apprends depuis le landing JavaScript et applique les types de cette page par-dessus.
Coddy programming languages illustration

Apprenez TypeScript avec Coddy

COMMENCER