betagouv / mission-transition-ecologique

Application Transition Ecologique des Entreprises
https://mission-transition-ecologique.beta.gouv.fr/
GNU Affero General Public License v3.0
6 stars 6 forks source link

[Refactor] Duplication du typage de `Program` / `ProgramData` #368

Open pierrecamilleri opened 9 months ago

pierrecamilleri commented 9 months ago

Le typage des données de programme est définie à deux endroits différents.

pierrecamilleri commented 9 months ago

Par ailleurs, ces types ont des clés en français, et parfois avec des espaces (reprise à l'identique des clés des fiches yaml) Il serait sans doute judicieux de traduire dès la lecture pour un type avec des clés sans espace et en anglais pour manipuler cet objet dans le code.

JulienParis commented 9 months ago

Par ailleurs, ces types ont des clés en français, et parfois avec des espaces (reprise à l'identique des clés des fiches yaml) Il serait sans doute judicieux de traduire dès la lecture pour un type avec des clés sans espace et en anglais pour manipuler cet objet dans le code.

Note pour plus tard, juste pour garder trace de notre conversation à ce sujet : cf https://github.com/betagouv/transition-ecologique-entreprises-widget/pull/374/files#r1412003988

dolemoine commented 1 month ago

Petit point après investigation et essais, besoin de votre avis sur la question @oumeimaelisbihani @yvalentin @ttdm :

1) Conserver un type ProgramData (ou un autre nom peu importe) mais qui étendrait le ProgramType: possible via l'utility Omit qui permet de ne pas prendre en compte certaines props et de les redéfinir comme on le souhaite :

export type ProgramData = Omit<
  ProgramType,
  "nature de l'aide" | 'opérateur de contact' | 'objectifs' | 'publicodes'> & {
  "nature de l'aide": ProgramAidType
  'opérateur de contact': Operators
  objectifs: ProgramObjective[]
  publicodes: PublicodesProgramData
}

j'ai également testé avec qq chose de plus générique en définissant un type Override :

export type Override<T, NewType extends { [K in keyof T]: NewType[K] }> = Omit<T, keyof NewType> & NewType

ce qui permet de réécrire directement les props concernées :

export type ProgramType = Override<
  ProgramType,
  {
    "nature de l'aide": ProgramAidType
    'opérateur de contact': Operators
    objectifs: ProgramObjective[]
    publicodes: PublicodesProgramData
  }
>

2) Remplacer totalement l'utilisation de ProgramData par ProgramType auto généré

C'est pas un ticket urgent, ça peut faire l'object d'une discussion tech au retour de vacances de tout le monde...