TypeScript 5 Nouvelles fonctionnalités — Utilisation pratique de l'opérateur satisfait et des décorateurs
USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。
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 typeconst- 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
| Point | Valeur |
|---|---|
| Principales nouveautés | satisfaits 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 majeur | satisfaits, nouveaux décorateurs |
| Date de début de la version principale | Mars 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:
| Version | Libération | Caractéristiques principales |
|---|---|---|
| TypeScript 5.0 | 2023-03 | satisfait, const type paramètres, extension de plusieurs fichiers tsconfig |
| Script de type 5.1 | 2023-06 | types getter/meilleur indépendants, améliorations JSX |
| TypeScript 5.2 | 2023-08 | utilisation/attente en utilisant des mots clés, métadonnées de décorateur |
| TypeScript 5.3 | 2023-11 | Attributs d'importation, rétrécissement de type amélioré |
| Script de type 5.4 | 2024-03 | NoInfer utilitaire, type de fermeture conservé rétrécissement |
- 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
// ❌ 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
// ✅ 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; // CouleurModèles d'utilisation pratique
Paterne 1: Validation des objets de réponse à l'API
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; // 5000Pattern 2: Définitions des routes
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
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;- 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égorie | Décorateurs expérimentaux | Décorateurs standard (5.0+) |
|---|---|---|
| Comment activer | "Décorateurs expérimentaux: vrai" | Activé par défaut (pas de tsconfig requis) |
| Conformité aux normes | Mise en œuvre personnalisée | TC39 Étape 3 |
| Ordre d'exécution | Ordre inverse | Ordre avancé |
| Métadonnées | EmetteurDécorateurMétadonnées | Utilisations Symbol.metadata |
| Appui fonctionnel | Limitée | Classe seulement |
Décorateurs de classe
// ✅ 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
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
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)
// 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.
// ❌ 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
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"- 1Extension de plusieurs fichiers tsconfig
En commençant par TypeScript 5.0, extends dans tsconfig.json peut utiliser un tableau.
// 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.
// Symbol.disposeobjet avec des propriétés
cla🔧 Related Free Tools
Connexe
USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
IT6 façons de générer un revenu complémentaire avec ChatGPT — Guide pratique et testé de monétisation pour 2026USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
IT2026 ChatGPT vs Claude vs Gemini — Comparaison des performances, des tarifs et des cas d’utilisation des chatbots IAUSD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
ITOptimisation de la vitesse des sites Web 2026 — Comment atteindre des Core Web Vitals de 90+USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...