2 votes

Typescript type mappé avec des clés filtrées

Si j'ai un type comme :

type T = {
  a: string,
  _a: string,
  b: number,
  _c: boolean,
  /* ... any number of unknown properties ... */
};

Y a-t-il un moyen de définir un nouveau type mappé qui possède toutes (et seulement) les propriétés de T qui ne commencent pas par la lettre _?

Par exemple, je veux résoudre le type ci-dessus en { a: string, b: number }.

3voto

jcalz Points 30410

Oui, vous pouvez simplement utiliser le type utilitaire Omit où le type de clé omis est le modèle type littéral de modèle `_${string}`:

type FilteredT = Omit;
/* type FilteredT = {
    a: string;
    b: number;
} */

Les types littéraux de modèle ont été implémentés dans microsoft/TypeScript#40598 (mais je ne vois pas de documentation dans le manuel ou les notes de version pour cela). Le type `_${string}` peut être lu comme "le caractère souligné suivi de n'importe quelle chaîne"; c'est-à-dire, "n'importe quelle chaîne qui commence par un souligné".

Lien vers le Playground pour le code

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X