2 votes

Typescript - créer un type qui désigne l'ensemble des nombres pairs

Est-ce que quelqu'un sait comment créer ce genre de type? si 'evenNumbers" est le nom du type, je veux par exemple que:

let a:evenNumbers = 3

renverra une erreur et

let a:evenNumbers = 4

ne le fera pas.

Merci.

2voto

AndyJ Points 580

Vous pouvez spécifier quels nombres sont valides pour un type donné.

par exemple

type EvenNumber= 2 | 4 | 6 | 8;

let foo: EvenNumber= 8;
let bar: EvenNumber= 9; // ERREUR: 9 n'est pas pair
let baz: EvenNumber= 10; // ERREUR: 10 est pair, mais il n'est pas défini comme faisant partie du type Even

Typescript Playground

C'est bien et tout ça, mais comme vous pouvez le voir, j'ai souligné le problème avec cette approche.

Même si 10 est pair, il affiche toujours une erreur car il n'a pas été défini comme faisant partie du type EvenNumber.

Vous pouvez donc redéfinir EvenNumber comme type EvenNumber= 2 | 4 | 6 | 8 | 10;

Génial! Maintenant let baz: Even = 10; fonctionnera, mais qu'en est-il de let baz: Even = 12; ?

Vous devez donc trouver un moyen de lister chaque nombre pair pour la définition du type. Il est probablement préférable d'utiliser un outil de génération de code, plutôt que de le faire manuellement!

Voilà, nous avons maintenant une définition de type qui n'accepte que des nombres pairs. Malheureusement, le fichier dans lequel il se trouve doit maintenant être incroyablement grand, et probablement causer des problèmes pour les compilateurs et les IDE!

Cela répond-il à la question? Oui!

Est-ce réellement utilisable dans le monde réel? Pas du tout.

1voto

borkovski Points 783

Vous pouvez définir un type comme ceci et jeter une erreur de Error à partir de la méthode constructor():

export class EvenNumber{
  value: number;
  constructor(value: number){
    if(value % 2 != 0){
      throw new Error('Pas pair');
    }
    this.value = value;
  }
}

Étant donné qu'EvenNumber est un type personnalisé, vous devriez utiliser le constructeur pour l'instancier :

let a:EvenNumber = new EvenNumber(3);

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