IT

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

USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。

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.

TypeScript 5 Aperçu

text TypeScript la fonctionnalité satisfies de TypeScript satisfies
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
brown wooden puzzle blocks on white surface

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

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)

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

🔧 Related Free Tools

Connexe