☰ Menu

30.09.2026 · Signal Titans Editorial

Le PEP 827 propose une manipulation de types inspirée de TypeScript pour Python

Le PEP 827 introduit la manipulation de types, les types conditionnels et la gestion des annotations au runtime, suscitant des débats chez les développeurs.

Une illustration conceptuelle horizontale et minimaliste d'un bloc géométrique solide se transformant en une grille cyan lumineuse sur un fond sombre.

Lors du Python Language Summit 2026, Michael J. Sullivan a présenté le PEP 827, une proposition visant à intégrer à Python de puissantes capacités de manipulation de types inspirées des comportements dynamiques observés dans des langages comme TypeScript.

Primitives de manipulation de types

Le PEP 827 introduit plusieurs primitives fondamentales dans le système de types de Python, notamment des types conditionnels, des types par compréhension avec filtrage optionnel, ainsi que des types membres qui exposent un itérable des membres d'un type avec leurs propriétés de nom et de type. Selon les discussions, la proposition évite d'ajouter de nouveaux mots-clés et inclut un prototype fondé sur mypy pour tester ces fonctionnalités.

Un cas d'usage principal concerne la simplification des applications web CRUD où les modèles de base de données nécessitent différentes variations selon les opérations. Plutôt que de maintenir manuellement des définitions redondantes, les développeurs pourraient appliquer des transformations telles que des vues publiques ou des modèles de création et de mise à jour directement depuis un modèle de base.

Compromis sur le stockage des annotations au runtime

Un enjeu majeur de la proposition réside dans la manière de stocker et d'évaluer les annotations de type à l'exécution, les bibliothèques modernes comme Pydantic et FastAPI reposant fortement sur ces informations. Le projet s'appuie sur un évaluateur exploitant les fonctions __annotate__(), en explorant le format chaîne de caractères d'annotationlib ou en combinant des représentations textuelles avec des fermetures d'environnement évaluées via eval().

Les développeurs principaux ont débattu des compromis en mémoire et en temps de calcul entre le stockage des chaînes brutes et l'évaluation des fermetures. Łukasz Langa a suggéré qu'interner les chaînes d'annotations courantes au sein de __annotate__() permettrait d'économiser de la mémoire sans dégrader les performances.

Turing-complétude intentionnelle et lisibilité de la syntaxe

Concernant la complexité du système de types, Sullivan a noté que l'adoption du PEP ferait passer le système de types de Python d'une Turing-complétude accidentelle à une Turing-complétude intentionnelle, à l'instar des génériques en Java. Les développeurs ont également abordé l'impact esthétique des types dérivés complexes pour les utilisateurs au quotidien.

Łukasz Langa et David Hewitt ont exprimé des craintes quant au risque de submerger les développeurs inspectant les types de retour des API, un problème déjà observé dans l'écosystème TypeScript. Le coauteur Yury Selivanov a reconnu que si les transformations avancées ajoutent de la complexité, elles restent nécessaires pour s'aligner sur l'expressivité de Python au runtime, tout en comptant sur le soutien des IDE et des serveurs de langage.

Illustration éditoriale générée par IA ; ce n’est pas une photographie documentaire.

Source: PEP 827: Type Manipulation (Python Language Summit 2026)