Open pierrecamilleri opened 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.
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
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
}
>
ProgramType
2) Remplacer totalement l'utilisation de ProgramData
par ProgramType
auto généré
ProgramData
, comme par exemple le type ProgramAidType
program["nature de l'aide"] as ProgramAidType
(pas favorable à cette solution, on perd l'intérêt du typage initial du type Dispositif
ProgramType
(Dispositf
en réalité) , générer également les enums et autres types dont qu'on utilise dans le code comme c'est le cas par exemple pour le ProgramAidType
?C'est pas un ticket urgent, ça peut faire l'object d'une discussion tech au retour de vacances de tout le monde...
Le typage des données de programme est définie à deux endroits différents.
Le premier a été renseigné manuellement :
ProgramData
Le second est généré automatiquement à partir du JSON Schema :
Program
. Il est normalement plus complexe que celui renseigné à la main car il intègre des contraintes supplémentaires.[ ] Evaluer si
ProgramData
peut être remplacé parProgram
[ ] Si oui, supprimer
ProgramData
et utiliserProgram
à la place.[ ] Sortir le type
Program
du fichierdata-pipeline.ts
dans un fichier plus explicite.