IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

TRef de 'a1' à 'h8' pour les échecs


Sujet :

TypeScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2018
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2018
    Messages : 36
    Points : 26
    Points
    26
    Par défaut TRef de 'a1' à 'h8' pour les échecs
    Bonjour,

    comment déclarer un type TReF pour définir des références de cases pour le plateau d'échecs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // point de départ: colonnes et rangées 
    type TFile = 'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'
    type TRank = '1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'
    Pour pouvoir calculer les mouvements il faut 4 constantes tableau, ce qui permet d'afficher le plateau suivant les directions cardinales (NORTH, EAST, SOUTH et WEST):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type TDims = TFile | TRank
     
    const DIRECTED_FILES: TDim[] = 'abcdefgh'.split('')
    const DIRECTED_RANKS: TDim[] = '12345678'.split('')
    const REVERSED_FILES: TDim[] = 'hgfedcba'.split('')
    const REVERSED_RANKS: TDim[] = '87654321'.split('')
    Et maintenant comment définir TReF pour que:

    * TRef soit une chaîne de 2 caractères exactement
    * TRef[0] apprteinne à l'ensemble TFile, de 'a' à 'h'
    * TRef[1] apprteinne à l'ensemble TRank, de '1' à '8'

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // générique
    export type TRef <file extends TFile, rank extends TRank> = `${file}${rank}`
    Le problème, c'est que chaque déclaration de variable de type TRFe requiert d'instancier correctement le générique à chaque fois.

    Faudrait il plutôt passer par une fonction (Guard) pour valider les refs à chaque fois qu'on en a besoin, et lever une exception au runtime au lieu du compile time ?

    Merci pour vos réponses !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2018
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2018
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    En fait si, les génériques, c'est automatique... ou presque !

    Considérez un peu le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    type TFile = 'a' | ... | 'h'
    type TRank = '1' | ... | '8'
     
    // générique avec interpolation de chaine de caractères
    type TRef <file extends TFile, rank extends TRank> = `${file}${rank}`
     
    const ref0: TRef <TFile, TRank>= '1h' // KO
    const ref1: TRef <TFile, TRank>= 'z0' // KO
    const ref2: TRef <TFile, TRank>= 'a1' // OK
    const ref3: TRef <TFile, TRank>= 'h8' // OK
    Et là cela fonctionne bien, les chaînes de caractères sont contraintes entre 'a1' et 'h8'

    Solution trouvée en fouillant quelque peu sur le net.

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. OpenLS: échec pour les lieudits habités
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 0
    Dernier message: 15/02/2013, 16h57
  2. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 11h18
  3. Probleme pour les insertion au format etranger
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/03/2003, 11h55
  4. Réponses: 2
    Dernier message: 08/10/2002, 19h26
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo