Partage
  • Partager sur Facebook
  • Partager sur Twitter

TYPESCRIPT transformation Cast

problème sur interface hérité

    15 mai 2022 à 10:39:05

    Hello, je me pose une question sur typescript, ayant commencer à coder sur du JS le typage n'est pas mon fort mais dans un projet perso que j'ai, je n'ai pas envie que ça parte en cacahuète du coup j'essaie de tout typer

    voilà mon problème

    J'ai deux interfaces : 

    Massage et Prestation

    export interface Massage {
      nom: string;
      prix: number;
      personnelRequis: number;
      duree : number;
      _id: string;
      image?: string;
      cols?:number;
      rows?:number
    }
    
    export interface Prestation extends  Massage {
      acquis:boolean
    }

    Prestation extends de Massage jusqu'à là tout va bien

    Sauf que j'ai un appel au back qui me récupère ma liste de massage, donc l'objet que je reçois est un tableau de massage voici mon appel : 

      getAllMassages(){
        return this.http.get<Massage[]>('http://www.localhost:3000/api/massages/massages');
      }

    Maintenant j'essaie de générer un objet 'listeDesPrestations' qui devrait être un tableau de prestation depuis mon appel au back qui me renvoie lui un tableau de 'Massage'

    this.massageService.getAllMassages().subscribe((massages: Massage[]) => {
          const listeDesPrestations : Prestation[] = massages.map(massage => massage.acquis = false)
    })

    Bien sûr ce dernier bout de code ne marche pas c'est pour ça que je suis ici, je peux passer par any, ou ajouter la propriété acquis non mandatory dans l'interface Massage mais ça me plaît pas plus que ça ...

    Si vous savez comment faire pour caster l'objet proprement je suis preneur, Merci d'avance !

    Entre temps J'ai trouvé ça 

    const listeDesPrestations : Prestation[] = massages.map(massage => Object.assign(massage,{acquis : false}))

    Si qqn a mieux je prends ^^




    -
    Edité par Grégoire-M 15 mai 2022 à 11:00:57

    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2022 à 17:42:02

      Bonjour, effectivement je pense que tu ne peux pas directement ajouter la propriété sur les objets au niveau du map (parce qu'il sont de type massage et que Typescript va "geuler")

      Je pense néanmoins que la syntaxe de destructuration (parfois appelé le spread) peut permettre de régler le problème facilement en créant un objet copie.

      const listeDesPrestations : Prestation[] = massages.map((massage: Massage): Prestation => ({
      	...massage,
          acquis: false
      }))

      Pour chaque massage de type Massage renvoi un objet de type Prestation.

      Et la destructuration permet de facilement créé un objet copie et d'ajouter des propriété à la volée.

      -
      Edité par SamuelGaborieau3 15 mai 2022 à 17:42:25

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        16 mai 2022 à 22:36:57

        Salut !

        Yes le spread opérator j'y avais pas pensé, Top je vais partir sur ça, merci ;) 

        • Partager sur Facebook
        • Partager sur Twitter

        TYPESCRIPT transformation Cast

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown