IT

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur satisfait et des décorateurs

Guide pratique sur TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur satisfait et des décorateurs, avec points clés, risques et outils liés pour mieux décider.

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur satisfait et des décorateurs

Takeaway Key Principales nouvelles fonctionnalités dans TypeScript 5.0~5.4: 1 l'opérateur satisfaits - valider les types tout en préservant l'inférence 2 décorateurs standard - conforme à la norme TC39 Stage 3, avec métadonnées support 3 paramètres de type const - inférence de type littéral plus forte 4 allongeant plusieurs fichiers tsconfig 5 améliorations enum et namespace. Les caractéristiques avec le plus grand impact pratique sont les "satisfaits" et les nouveaux décorateurs.

Réponse principale: Les principales caractéristiques de TypeScript 5 sont l'opérateur satisfaits et les décorateurs standard.

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur satisfait et

TypeScript 5 Aperçu

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur sat
PointValeur
Principales nouveautéssatisfaits opérateur, décorateurs standard, paramètres de type const, extension de plusieurs fichiers tsconfig, améliorations enum et namespace
Caractéristiques ayant un impact pratique majeursatisfaits, nouveaux décorateurs
Date de début de la version principaleMars 2023

TypeScript 5 est une version majeure qui a commencé en mars 2023, avec plusieurs mises à jour mineures accumulées de 5.0 à 5.4. Les changements les plus importants dans cette version sont l'introduction de décorateurs standard et l'opérateur `satisfait'.

Temps de sortie majeur par version:

VersionLibérationCaractéristiques principales
TypeScript 5.02023-03satisfait, const type paramètres, extension de plusieurs fichiers tsconfig
Script de type 5.12023-06types getter/meilleur indépendants, améliorations JSX
TypeScript 5.22023-08utilisation/attente en utilisant des mots clés, métadonnées de décorateur
TypeScript 5.32023-11Attributs d'importation, rétrécissement de type amélioré
Script de type 5.42024-03NoInfer utilitaire, type de fermeture conservé rétrécissement
  1. 1L'opérateur satisfait — Un guide pratique complet

L'opérateur satisfaits est l'une des fonctionnalités les plus innovantes introduites dans TypeScript 5.0. Il va au-delà des limites des assertions de type traditionnel par validation des contraintes de type tout en préservant l'inférence de type.

Le problème existant

typescript
// ❌ le problème de l'approche traditionnelle
type Color = "red" | "green" | "blue";
type ColorMap = Record<string, string | number[]>;

// en tant que:
palette const = {
rouge: [255, 0, 0],
vert: "#00ff00",
bleu: [0, 0, 255]
} comme ColorMap;

Nombre de chaînes de caractères
// .map()
palette.red.map(x => x); // Chaîne de caractères: nombre[]

L'utilisation satisfait

typescript
// ✅ satisfies opérateur
type Color = "red" | "green" | "blue";
type ColorMap = Record<Color, string | number[]>;

palette const = {
rouge: [255, 0, 0],
vert: "#00ff00",
bleu: [0, 0, 255]
} satisfait ColorMap;

, / / / /
palette.red.map(x => x); // Numéro de code[]
palette.green.toUpperCase(); // Chaîne de caractères
const wrong = { pourpre: "pourple" } satisfait ColorMap; // Couleur

Modèles d'utilisation pratique

Paterne 1: Validation des objets de réponse à l'API

typescript
interface ApiConfig {
  baseUrl: string;
  timeout: number;
  retries: number;
}

// satisfait
const config = {
baseUrl: "https://api.example.com",
durée: 5000,
commandes: 3,
} satisfait ApiConfig;

// config.timeout (numéro)
type TimeoutType = type de config.timeout; // 5000

Pattern 2: Définitions des routes

typescript
type Route = {
  path: string;
  component: React.ComponentType;
  auth?: boolean;
};

routes de const = [
{ chemin: "/", composant: Home },
{ chemin: "/tableau de bord", composant: tableau de bord, auth: true },
] satisfait à la procédure[];

// routes[0].path="/" (=")

Paterne 3: Objets de traduction multilingues

typescript
type TranslationKey = "hello" | "goodbye" | "welcome";
type Translations = Record<TranslationKey, string>;

const ko = {
Bonjour :
Au revoir: "
Bienvenue : "
} satisfait les traductions;

en = {
Bonjour.
Au revoir.
// Bienvenue !
} satisfait les traductions;
  1. 1Décorateurs standard — Mise en œuvre complète de l'étape 3 du TC39

TypeScript 5.0 prend en charge Les décorateurs standard de l'étape 3, séparés des décorateurs expérimentaux utilisés depuis longtemps («décorateurs expérimentaux»).

Différences clés

CatégorieDécorateurs expérimentauxDécorateurs standard (5.0+)
Comment activer"Décorateurs expérimentaux: vrai"Activé par défaut (pas de tsconfig requis)
Conformité aux normesMise en œuvre personnaliséeTC39 Étape 3
Ordre d'exécutionOrdre inverseOrdre avancé
MétadonnéesEmetteurDécorateurMétadonnéesUtilisations Symbol.metadata
Appui fonctionnelLimitéeClasse seulement

Décorateurs de classe

typescript
// ✅ TypeScript 5 décorateurs standard
function sealed(target: typeof SealedClass) {
  Object.seal(target);
  Object.seal(target.prototype);
}

@scellé
Classe scellée {
salut() { retour "Bonjour!"; }
}

Décorateurs de méthodes

typescript
function log(target: any, context: ClassMethodDecoratorContext) {
  const methodName = String(context.name);

fonction de retour (cela: any, ...args: any[]) {
consol.log(`[${methodName}]
const result = cible.call(ceci, ...args);
console.log(`[${methodName}]:`, résultat);
le résultat du retour;
};
}

Calculatrice de classe {
@log
add(a: nombre, b: nombre): nombre {
retourner a + b;
}

const calc = nouveau calculateur();
l'alinéa 2 du paragraphe 2 du présent article;
// [ajouter] [1, 2]
[Ajouter]

Décorateurs d'accessoires

typescript
function readonly(target: any, context: ClassAccessorDecoratorContext) {
  return {
    set() {
      throw new Error(`${String(context.name)} est en lecture seule.`);
    }
  };
}

classe Config {
@readonly
la version d'accessor = "1.0.0";
}

const cfg = nouveau Config();
console.log(cfg.version); // "1.0.0"
cfg.version = "2.0.0"; //

Métadonnées du décorateur (TypeScript 5.2)

typescript
// utilisation de l'API de métadonnées
function validate(target: any, context: ClassFieldDecoratorContext) {
  context.metadata[context.name] = { required: true };
}

classe UserForm {
@validate
nom!: chaîne;

@validate
e-mail!: chaîne;
}

- Oui.
les métadonnées de const = UserForm[Symbol.metadata];
console.log(metadata); // { nom: { requis: true }, email: { requis: true }

3. Const Paramètres de type

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur sat

Le modificateur const ajouté dans TypeScript 5.0 renforce l'inférence de type pour les fonctions génériques.

typescript
// ❌ approche traditionnelle
function identity<T>(value: T): T {
  return value;
}

résultat const = identité(["a", "b", "c"]);
// résultat: string[]

// Const
identité de la fonctionConst<const T>(valeur: T): T {
valeur de retour;
}

Const result2 = identityConst(["a", "b", "c"]);
// result2: en lecture seule ["a", "b", "c"]

Utilisation pratique : Constructeur de route

typescript
function createRoute<const Path extends string>(path: Path) {
  return { path, url: () => `https://app.example.com${path}` };
}

const homeRoute = createRoute("/");
// homeRoute.path: "/" (-)

Const dashRoute = createRoute("/dashboard");
// dashRoute.path: "/tableau de bord"
  1. 1Extension de plusieurs fichiers tsconfig

En commençant par TypeScript 5.0, extends dans tsconfig.json peut utiliser un tableau.

json
// tsconfig.json
{
  "extends": [
    "@tsconfig/strictest/tsconfig.json",
    "@tsconfig/node18/tsconfig.json",
    "./custom.tsconfig.json"
  ],
  "compilerOptions": {
    "outDir": "dist"
  }

Auparavant, vous deviez hériter de plusieurs fichiers à travers une chaîne, mais maintenant, plusieurs héritages peuvent être traités à la fois avec un tableau.

5. utiliser / attendre en utilisant Mots-clefs (TypeScript 5.2)

TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur sat

Ce sont de nouveaux mots clés pour la gestion des ressources, semblables à ceux de Java.

typescript
// Symbol.disposeobjet avec des propriétés
cla

🔧 Outils gratuits liés

Prochaine étape utile

Continuer depuis ce guide

Connexe