Parlons Dev

Paul fait face à 8 000 erreurs TypeScript sur un projet du boulot. Dans cet épisode, il nous fait part de sa stratégie pour réduire leur nombre. Paul et Baptiste discutent des bonnes pratiques à suivre pour la configuration d'un projet TypeScript et font un tour des outils qui étendent les capacités de TypeScript, tels que Zod ou Zodios.

Creators & Guests

Host
Baptiste Devessier
Développeur Web Fullstack en Freelance
Host
Paul Rastoin
Développeur Web Fullstack du Sud de la France

What is Parlons Dev?

Dans Parlons Dev, Paul Rastoin et Baptiste Devessier explorent le monde du développement, du web et de la tech, et parlent des sujets qui les intéressent sur le moment.

Paul: et bien salut à tous! Salut Baptiste et euh dans cet épisode de parlons de on va discuter euh appliqué à un sujet plutôt précis qui est par exemple l'arrivage sur un un projet avec un héritage fort sur des configurations trop permissives ou une implémentation pas très stricte de euh comment vas-tu Baptiste avant tout écoute

Baptiste Devessier: très bien pressé que tu nous parles de de des petits problèmes que t'as eu avec.

Paul: Ouais, c'est un exemple un peu appliqué sur un retour d'expérience que de pas tant un retour mais plutôt mon présent aussi Euh mais en effet donc pour poser un peu plus de contexte, il s'agit de traiter euh une on va dire dans le temps sur un sur un gros gros projet par exemple avec un bon nombre d'erreurs lorsque la compilation enfin lorsque la configuration devient stricte.

Euh on parle d'un volume disons environ dix mille erreurs généré suite à l'activation par exemple du très connu à trou euh si on doit pour préciser ce qu'est ce ou cette config, il s'agit euh de faire bien une différence au niveau du compilateur pour entre euh ce qui amène vraiment euh plein de modifications dont déjà ne serait-ce que dans le de de pardon dans la déclaration des modèles, la gestion des modèles, la lecture des modèles, toute la logique en réalité.

Mais ce qui est assez insinueuse insidieux pardon avec ce aussi c'est que désactiver il peut amener vraiment de très euh euh concrète erreurs quoi c'est pas c'est pas ça ne s'arrête pas qu'à c'est des comportements déterminés des qui vraiment vont impacter euh la production de ce site ou ce genre de chose quoi c'est ça

Baptiste Devessier: le problème avec les champs optionnels?

Euh

Paul: comme quoi tout à fait. Et là il y a une petite surcharge en plus qui est que euh dans beaucoup de modèles mais pas tous. Euh c'est par exemple dans certains cas où tu peux avoir des champs qui sont déclarés nuls euh mais qui sont en réalité et cetera. Et lorsque tu fais une comparaison stricte entre nul et t'as encore plus de potentiel d'erreur, ce qui fait qu'il y a vraiment une double relecture entre quelle est la donnée que auquel je peux m'attendre est-ce qu'elle est vraiment optionnelle et si elle est optionnelle et si elle est pas optionnelle est-ce qu'elle peut être quoi?

C'est le côté un peu fou

Baptiste Devessier: sans

sans ce est-ce qu'on peut dire que l'avantage de est sacrément réduit.

Paul: Bah oui largement en tout cas selon moi oui mais je je pense que ce alors je ne sais pas d'ailleurs tiens, les raisons exactes de ce je pense que c'est plus pour euh une version ou sur le passage à un un projet?

J S Voilà c'est ça. Mais ce qui est très compliqué aussi avec ce donc toujours pour rester sur le euh c'est que pour régler les soucis il n'y a pas vraiment de de recette incrémentale quoi c'est-à-dire que bah félicitations tu as huit mille erreurs de comment tu vas les gérer et surtout une erreur de peut en cacher une autre.

Ça c'est toujours le cas d'ailleurs euh donc quand tu fais une mutation euh stricte des modèles de données en entrée par exemple sur une PS que tu consommes bah en réalité tout ton font et toute la toute tous tes services qui en découlent tout est tout est vu et ce qui en découlent vont la consommer différemment vu qu'elle sera strictement typée, il faudra gérer tous les enfin tous les tous les où par exemple tu n'as pas réussi à récupérer une donnée ou peu importe quoi.

C'est d'ailleurs pour ça que bon après c'est sans sans être le détracteurs mais je peux comprendre que les gens euh veulent aller vers un produit euh enfin sont très avec ces solutions et cetera mais je pense que Enfin j'entends les détracteurs de dire que c'est trop chiant quoi en gros euh ton ton copilote te dit attention, c'est peut-être un mais ça ça ne le sera jamais.

Bah en réalité euh te permet de de faire en sorte que ça ne le soit jamais quoi? Donc c'est souvent souvent les les selon moi hein, ça n'engage que moi mais les les contre arguments qu'on trouve à en réalité viennent d'un d'une mauvaise intégration ou quelque chose de pas assez stricte justement. ça dépend

Baptiste Devessier: peut-être aussi du projet puisque c'est des choses que je vois beaucoup sur Twitter où euh dix personnes ont tout un avis divergent sur la question du degré de de que doit avoir et par exemple quel comportement adopter fasse.

je sais pas quelque chose qu'on n'arrive pas à Typer et euh j'ai vu ça il y a quelques jours où les gens se Mac Pocock aussi donnait son avis là-dessus sur la différence entre T S T S ou juste ce genre de chose. Personne n'a le même, n'a le même avis là-dessus ça, ça dépend sûrement de la taille de l'équipe.

Le produit, la philosophie de de de si on est plus euh en ou si au contraire il y a beaucoup de test, beaucoup de c I des tests comme ça Donc euh, toi peut-être Paul, que tu t'es plus dans une culture d'entreprise, là où tu es où il faut sortir quelque chose qui qui marche bien, un peu en béton non?

Paul: Bah j'aurais tendance à te dire que oui mais tout en ayant que t'as les huit mille problèmes, voilà, c'est ça quoi.

Donc en même temps moi je pense surtout que après dans dans ce genre de grosses boîtes et de grosses entreprises, les décisions techniques, elles sont prises vraiment plus tard. Enfin, je veux dire sur des migrations de techno et cetera et m'ont ressenti là-dessus sans vraiment connaître le sujet. C'est de nouveau, c'est mon avis personnel, c'est que fut à un moment où était à la mode et il a fallu faire un projet.

Et les gens du coup ont vraiment en réalité c créé un projet qui qui a des fichiers mais qui en réalité plus un projet Javascript hein. oui euh donc euh après il y a quand même des choses en réalité hein je veux dire tous les modèles sont sont explicitement déclarés et ce mais de nouveau on est sur des sur un énorme site qui consomme énormément de services et qui n'a aucune synchronicité entre les services et les types.

Donc maintenir des modèles à la main sans avoir forcément l'information qu'un modèle à muter, c'est pas possible, c'est pour ça d'ailleurs enfin ça ce sera peut-être pour une autre fois. Mais euh T R C PT r CP Ouais ouais c'est ça R R PC t R. PC Ouais je confonds tout le temps et euh t S S ou même encore zoos sont des solutions vachement intéressantes pour ce genre de cas pour ne serait-ce que mais ne serait-ce que d'ailleurs avoir une de type partagé en réalité hein entre oui après ça dépend de la technique de ton p I.

Quoi.

Baptiste Devessier: mais du java en bac Euh qu'est ce quel

Paul: est ton avis? Bah c'està-dire que du moment que ton service peu importe tu peux être agnostique de de la tech du moment qui est exporté un tu peux générer un peu une infinité de choses hein? Ne serait-ce que d'ailleurs des B F F ou peu importe enfin je veux dire tu peux surcharger un peu comme tu veux.

Baptiste Devessier: B F F. C'est quoi

Paul: bon? Ça marche aussi tout à fait. mais euh oui en effet c'est c'est des sujets vachement plus poussés que simplement fixer des après c'est vraiment définir les bases qui font que ton va être maintenables et et rigoureux dans le temps tu vois c'est pour ça d'ailleurs comment euh euh a approcher ces ces ces ces ces gros volume de c'est-à-dire que les fixer manuellement n'est même plus imaginable et les faire de manière automatique non plus c'est-à-dire que ce n'est pas possible.

C'est-à-dire que tu peux pas automatiser avec des ou des des modifications qui vont avoir des régressions sur le fonctionnel Euh c'est pas si simple, c'est pas par exemple une immigration euh de d'une île à une autre, comme je pense à Karma où bon ben en effet, il y a des Enfin, il y a des différences entre les P I.

En cherchant un petit peu avec des il est possible. En tout cas, ça dépend de la complexité de l'application de faire une migration automatique plus ou moins, c'est à dire que tu tu peux trouver des récurrents et les

Baptiste Devessier: remplacer. Mais donc si on ne peut ni faire le changement man manuellement ni utiliser un outil, il ne reste plus que l'intervention divine ou une autre solution.

On va

Paul: tout refaire. c'est c'est une possibilité. Mais euh après, à vrai dire, c'est pas possible, c'est c'est même pas quelque chose de budgétisée dans la vraie vie là en tout cas me concernant de nouveau l'idée c'est pas que de parler de mon sujet, enfin de mon mes problèmes. Euh euh actuel sur ce sur ce sujet là, mais plutôt dans son ensemble.

C'est peu importe si même toi qui nous écoutes, tu arrives sur un projet avec ne serait-ce que mille erreurs où tu t'aperçois qu'en réalité ça peu importe la quantité d'erreurs que certains de ne sont pas activés et que tu souhaites les activer. c'est là que c'est intéressant, c'est de déjà personnellement en tout cas mon approche et de trouver le code.

Euh imaginons des fichiers de mooc euh qui sont en héritage, qui ne sont même plus consommés dans des tests et cetera s'ils sont pas typés avec avec des ou des ben du coup il y aura des aires de donc euh utiliser des outils comme CNIP ou encore T S Prune pour déterminer vraiment des occurrences dans ta qui euh qui amènent des erreurs mais qui en réalité ne sont pas du tout euh légitimes quoi Euh vraiment faire un bon coup de bien élaguer avant de commencer exactement voilà, c'est exactement le terme.

Et donc après avoir élagué, c'est là encore où un c'est un autre débat mais euh personnellement je fais vraiment une différence du coup en fait il faut faire attention aux tests c'est-à-dire que tu vas sûrement rencontrer des erreurs de de type tu as forcément des erreurs de type dans tes tests, ça dépend de la granularité de tes mox et cetera.

Mais le problème c'est que si tu par exemple, on revient sur le et désactivé. En réalité, tu peux démarrer tes tests sur des modèles partiels de ton application c'est-à-dire que tu vas tester. Euh je sais pas que la page de ton elle se s'affiche bien, mais en réalité dans ton test, tu ne vas moquer que le nom du et pour une raison X ou y Imaginons que d'autres champs dont soit défini viennent changer la vue, que le titre soit plus disponible et cetera parce que des éléments sont apparus.

Bah par exemple, un de tes tests peut casser sur la position de l'élément ou sur sa visibilité et cetera donc euh, du jour au lendemain tu vas vraiment modifier la base. Enfin l'écosystème dans le Enfin le le contexte d'exécution exactement euh de tes tests, ce qui font que ça pourrait avoir un impact sur leur leur résultante quoi.

A noter aussi que dans des tests d'intégration ou des tests il y a une sacrée plus-value à ne pas avoir. Euh pas ces soucis là quoi c'est vraiment du c'est plus et t'as pas à te te soucier de qu'est ce que t'injecte dans ton à ce moment précis? Mais plutôt à savoir qu'est ce qui en ressort sur ce dome ou ce sujet, ce dom quoi!

Voilà. Mais du coup donc

Baptiste Devessier: juste pour que tout le monde comprenne l'application où tu as huit mille erreurs, c'est du ou du bac c'est du

Paul: c'est du oui oui oui tout à fait, mais d'ailleurs dans un dans le dans le cas de bac en réalité je ne enfin le le sur du bac je vois même pas comment c'est concevable en réalité hein parce que ne serait-ce qu'en termes de sécurité.

Ne pas savoir ce que tu vas provider dans ton D P I euh. je je trouve ça limite et même il est forcément obligatoire de définir une un t P I avec bah peu importe qui consomme bah ton service quoi donc euh ça je je je je je suis sûr que ça existe, il n y a pas de souci mais je veux dire je suis plus dubitatif quand même Oui mais donc les les les tenants aboutissants en réalité t'as raison sont différents dans ce dans ce genre de cas.

tout à fait,

Baptiste Devessier: en tout cas de mon de mon expérience aussi, bosser sur des avec un qui ne soit pas défini à trou ou même tout simplement une qui soit pas qui soit pas stricte, c'est c'est un peu compliqué parce que l'avantage de se fait moins sentir et ça donne même plus l'impression que c'est un peu un boulet au pied, quoi.

Parce que bah oui bah on fait directement c'est comme si on faisait du javascript sans aucune sécurité en pensant qu'il y en a parce que c'est marqué quand on compile ou quoi

Paul: exactement ou que tes fichiers sont des DT s aussi c'est ça? Mais c'est c'est là le le faux ami En réalité, personnellement, avant d'arriver sur un projet, je vais tout tout ça je regarde le mais aussi le test config parce que tu tu t'aperçois très vite que enfin, si tu dois faire des choses fonctionner sur un projet, tu t'aperçois très vite que ça va être plus compliqué en fonction des ou pas qui sont créés.

et euh d'ailleurs il n'y a pas que le en réalité il y en a d'autres hein par exemple en réalité enfin c'est ça qui est un peu vicieux je trouve c'est que pour un débutant en et c'est souvent le cas par exemple à quarante-deux sur l F T Transcendance, beaucoup de gens vont désactiver le pourquoi.

Parce qu'en fait ils ont des erreurs qu'ils ne comprennent pas. et qui vont Google au premier abord et le premier truc qui sur lequel ils tombent c'est un article où le premier commentaire liké ou qui a été Euh c'est pas souvent le plus mais c'est celui qui a été marqué comme réponse au sujet quoi!

Et ben ça va être de désactiver le ce en fait oui non mais c'est ça enfin tu vas désactiver t'auras plus le problème Oui en effet, mais c'est comme ne jamais free et ou j'en sais rien quoi hein C'est c'est plus un problème d'intégration qu'un problème de enfin c'est plus un problème de conception quoi.

Baptiste Devessier: après euh, souvent la meilleure façon de résoudre un problème, c'est euh d'abandonner la poursuite

Paul: de cet objectif quoi? Très bien allons allons élever des chèvres dans l'obere alors non mais là

Baptiste Devessier: c'est vrai que dans ce coup là c'est c'est un peu extrémiste mais euh

Paul: bah là c'est quand même désactiver un un pan massif de mais surtout euh c'est pas faire du que désactiver ce ce là j'insiste un peu en réalité.

Euh il y a une autre plus-value à quand tu désactives ce c'est que tu consommes des librairies qui sont fortement typées. Donc malgré tout tu as de l'auto sur ces données là. Tu tu tu peux t'attendre à une de des services que tu consommes donc malgré tout, tu

Baptiste Devessier: peux casser vraiment javascript pourvu que tu sois dans un environnement qui comprenne le dans c'est vrai.

Paul: Et là, j'avoue je c'est vrai, c'est plus lié à l'idée en réalité hein. Mais

Baptiste Devessier: donc il y a encore moins d'avantages si on

Paul: ou si on oublie celui-là c'est vrai c'est vrai, non? Comme ça c'est en réalité merci V Scott surtout je je, je je suis d'accord. Et un un dernier je sais pas d'ailleurs si tu as rencontré beaucoup celui-là ou pas.

mais ça souvent sur des projets. Bah d'ailleurs de nouveau f t transcendance hein? Euh le je vais le à ça euh de galérer Euh qui est ta? On cherche des

Baptiste Devessier: sponsors qui sont orthophonistes peut-être

Paul: j'ai souvent du mal exactement je prendrai un rendez-vous tout de suite. enfin bon et euh du coup oui, ce que je disais, c'est que le voilà.

Ce te permet de ne pas assigner euh, lors d'une déclaration d'une variable d'un d'une classe, de ne pas l'assigner à la volée. C'est-à-dire que tu déclares ta classe mais tu ne fais pas d'assignation et c'est-à-dire que couplé à tu te retrouves avec des des entrées ou des variables dans ta classe qui sont typées euh et non assignées présentes.

Mais du coup elles sont mais pas typées comme Ah d'accord, ok, tu vois ce que je veux dire et donc ça c'est pareil, c'est c'est encore une galère. à savoir aussi que pour le coup euh si encore euh ce que je disais tout à l'heure pour la l'article st pardon euh de était vrai il est un peu en vrai satirique parce que quand même c'est c'est un peu gros mais celui-là il est concret.

C'est à dire que dans beaucoup de cas euh les gens vont demander à désactiver ce et souvent c'est le cas dans parce qu'en réalité tu déclares tous tes modèles et tes interfaces à travers des classes pour des plus values comme euh et cetera pour de la validation ou même du typage de savoir qu'il existe d'autres solutions plus zod euh qui permettent aussi de faire ce genre de truc même dans une enfin bref.

Euh il existe aussi une manière de ne pas avoir cette erreur native au au j'en oublie toujours le nom je vais sûrement le retrouver mais c'est faire une assignation avec un point d'exclamation. Euh juste avant les deux points euh de ta variable qui permet en fait de dire Ben elle n'aura pas de d'assignation par défaut quoi!

Enfin,

Baptiste Devessier: c'est pas pour dire que le champ est optionnel et qu'il peut ne pas être défini par exemple dans une interface c'est de ça que tu parles.

Paul: Non, ça c'est enfin là. Tu parles vraiment de champ optionnel avec le le point d'interrogation? Non? Le point d'autor Voilà, moi je parle vraiment de du du des points d'exclamation.

L'exclamation oui, je l'oublie tout le temps le nom de ce de cette mécanique là. Ouais

Baptiste Devessier: euh, c'est pour dire que ce truc là est vraiment défini, même si tu crois que ça ne l'est pas.

Paul: Donc euh euh je saurais plus exactement te dire m hop, je vais rapidement le chercher mais après bon enfin vraiment mais il y a, il y a vraiment un terme pour ce pour ce cet aspect là.

J'avais pas anticipé, ça m'est venu en en discutant. Mais euh dans le cas de de nes c'est assez récurrent ou même en vrai. C'est assez rare de ne pas vouloir déclarer ta Enfin c'est le gros problème je trouve avec ces modèles là, c'est que du coup la plus-value de la classe est ok t'as besoin Il y a besoin de pour faire de la validation dans ton d'avoir un résidu de ton type.

Ça peut pas être des interfaces mais t'as toujours des alternatives qui sont moins élus c'est sûr

Baptiste Devessier: Peut-être juste préciser comme tu l'as abordé plusieurs fois ce qu'est le projet transcendance de quarante-deux quarante-deux c'est l'école que nous avons tous les deux faite bienvenue sa le projet de transcendance.

Euh bon, on ne l'a pas fait. Ni toi

Paul: ni moi, on en a enfin, Moi j'en ai, j'en ai deux trois quoi, mais mais je t'en prie vas-y je te je te laisse le décrire.

Baptiste Devessier: Ah ouais c'est euh c'est le projet final à l'école Quarante-deux actuellement qui permet ensuite de de faire un stage ou de continuer le cursus. Et euh actuellement je crois que ça va changer.

Mais actuellement l'idée c'est de faire un avec plein d'autres fonctionnalités. Euh création de compte multiroom des choses comme ça, voilà.

Paul: Ouais après le le sujet a une défini vraiment autour du jeu un chat et des des joueurs, des amis et cetera après de nouveau dès que t'as enfin le sujet n'est pas est assez brut de fonderie c'est-à-dire que sera laissé au goût de chacun d'implémenter des des surcharges ou des des modes ou peu importe le genre de choses mais la d'ailleurs est imposée.

Mais c'est oui, je sais pas ce dont tu parlais, mais je crois que dans le fond c'était du euh quoi que non, il n'y avait pas de typhon

Baptiste Devessier: du spt Euh enfin à l'heure actuelle et côté c'est du ça c'est c'est je crois. OK ok

Paul: voilà. Et du coup il y a forcément aussi des notions de de protocole comme du et cetera enfin les pour la gestion de la pas du jeu tout simplement.

Enfin voilà, mais du coup voilà pour rester transcendant c'est c'est pour ça d'ailleurs ça ça! c'est c'est c'est assez récurrent ce genre de de petit souci de petites coquilles qu'on rencontre sur des projets

Baptiste Devessier: que les étudiants découvrent. Le euh à quatre-vingt-dix-neuf pour cent avec ce projet jusque là c'est des projets principalement accès système avec du C c'est que du C du C plus plus et là c'est le vrai premier projet euh tourné web.

C'est pour ça que je parle aussi sous ton contrôle bien sûr, mais c'est pour ça que euh souvent on a vu des des étudiants euh commettre ces ces ces cette erreur mais moi aussi j'ai déjà fait le coup de désactiver les les trucs quand tu ne connais pas, bien sûr c'est ça.

Paul: Mais surtout euh enfin je sais pas si en réalité est une erreur.

le nom qu'on lui donne quoi? C'est-à-dire que j'imagine qu'il y a vraiment quelqu'un qui a un jour active ce ouais ouais non non mais enfin est-ce que c'est vraiment tout le temps une erreur d'activer ce de désactiver ce c'est ça la question que je me pose. Je pense qu'il y a vraiment un moment où c'est vraiment utile.

Ne serait-ce que dans une période transitoire pour définir l'aspect de nouveau tu vois, c'est pas forcément une erreur, c'est ça pas non plus. il y a des choses qui nous dépassent. Euh et puis parfois

Baptiste Devessier: on l'a un petit peu dit au début, mais il y a des contraintes business qui font que, plutôt que d'être bloqué sur huit mille ou même moins plutôt que de ralentir la progression du développement, parfois il faut en prod.

Euh, les utilisateurs attendent un fixe ou quoi? Et donc on se permet, euh quelques quelques facilités mais qui sont nécessaires, c'est c'est le principe du développement, c'est que on n'est pas juste là pour théoriser des choses. on est surtout là pour développer des des outils qui servent aux utilisateurs.

Donc c'est ce que je vois beaucoup sur sur Twitter aussi cette un peu cette cette ce mouvement dichotomie entre les Enfin les développeurs qui euh sont un petit peu à cheval sur comment doivent être faites les choses et ceux qui au contraire s'en foutent complètement. Donc bon, je pense qu'on peut trouver un juste milieu en étant ni un extrémiste.

ni d'un côté ni de l'autre. Mais euh, en sachant que est là pour nous aider et que même si parfois on moi aussi honnêtement, très régulièrement, je fais du T s des choses comme ça parce que j'ai juste envie de passer à autre chose ou que c'est un problème d'incompatibilité dans une vie ou des choses comme ça, des choses qui ne sont pas forcément que de mon ressort.

Mais j'ai juste pas envie de passer trop de temps là-dessus et euh, Mais il ne faut pas perdre à mon à mon sens de vue. Que est là pour qui

Paul: apporte énormément d'avant à ça. C'est pas une contrainte en réalité, c'est un allié, hein, ça évite d'avoir enfin ne serait-ce que la compilation. Par exemple, lancer le compilateur est aussi ton allié tu vois enfin, c'est une surcharge qui te permet d'éviter de un peu moins.

Ouais, j'ai compris ça, mais c'est c'est je ne peux pas être en désaccord mais euh c'est c'est vrai que c est souvent vu comme une plaie. Euh par les gens qui ont toujours été euh sur des sur du javascript un peu ou des implémentations un peu basiques mais mais enfin personnellement, euh, ce que j'aime énormément avec, c'est que peu importe la sur laquelle tu enfin le projet, pardon, parce que la ça sera forcément du du coup.

Mais le projet sur lequel t'arrives euh, t'as toujours une aisance. de de de savoir lire, pas seulement le code mais aussi les types c'est-à-dire que pour Enfin, avant de réfléchir à la complexité fonctionnelle, je réfléchis à quel est le modèle de données ou quelles sont les qui vont traverser mes différentes complexités et comment je peux les les les définir avant même d'arriver à développer le le, le contenu de mon ou ma vue peu importe à savoir que ben là c'est ce va recevoir.

Forcément cette vue là va recevoir forcément des données strictement typées qui sont plus parce que ces cas là ont été gérés par un leurre plus global. Au-dessus enfin c'est tu vois c'est plus des détails d'implémentation, ça fait ça pousse à la réflexion avant de c'est un peu comme euh d'être sur ce point là.

Il faut bien qu'on en parle mais

Baptiste Devessier: mais euh bah par rapport à par rapport à ça Euh je pense qu'il faut quand même noter que euh, d'un projet à l'autre, d'un développeur à l'autre, on n'a pas forcément tous les mêmes manières de définir les tout à l'heure. Tu parlais de zod Euh j'utilise aussi zod très régulièrement où je définis quasiment tous les types qui sont qui existe aussi une validation comme les choses que je récupère d'une d'une API Les choses que j'envoie une API tout ça, je le définis avec du zod.

pour ensuite pouvoir le Barr. Et euh, honnêtement, c'est c'est une librairie quoi, Ça n'a rien de natif à donc ça nécessite encore un un apprentissage? Quelqu'un qui arriverait

Paul: sur ce projet? Tout à fait. Mais d'ailleurs, enfin, c'est toujours important de le préciser mais n'existe pas. C'est à dire que derrière, c'est une transpi qui amène à du avt.

C'est parfois un peu compliqué à comprendre au début, ça c'est pas quelque chose auquel tu t'attends et c'est là qu'en fait Zod Ah est une surcharge super intéressante puisqu'elle permet de persister le typage au ou en tout cas aux yeux du développeur c'est c'est c'est transparent c'est-à-dire

Baptiste Devessier: que de donner un peu une existence au type en s'assurant que le type auquel on s'attend est bien celui qu'on a en validant les données c'est

Paul: ça?

Donc en fait c'est vraiment une librairie de déclaration d'objet. euh qui permettent de de des types. Et ces objets sont utilisés au par Zod pour passer les modèles de données en entrée et en règle en règle générale. Euh moi, c'est ce que je conseillerais tout le temps parce que je conseiller, c'est ce que je ferais tout le temps, c'est lorsque je consomme une P I.

Je vais vraiment attester des champs vraiment? bloquant pour moi. S'ils ne sont pas là, je vais vraiment vérifier leur cohérence, leur comme ça Après euh, t'envoies des données aux et tu les parses à la volée dans ton service ou tu veux dire par exemple, tu les intègres à du ou des trucs comme ça?

Baptiste Devessier: t'as tout dit.

Voilà juste quitter le podcast.

Paul: Ouais désolé je

Baptiste Devessier: toi même. Non mais effectivement quand je valide des formulaires, je fais ça avec avec zod Euh, ce qui permet de faire d'une pierre deux coups. ce qui permet de t'assurer que tu envoies les bonnes données à ton bac même si derrière ils le vérifient forcément.

Mais euh, ça te permet aussi de valider le formulaire, par exemple que l'email sélectionné soit bien un vrai ou que le entré contienne bien plus de trois caractères. Concernant ça, il y a juste une chose que je veux noter, c'est que j'ai vu encore une fois Twitter et mon flux d'information principal et j'ai vu des gens discuter du fait euh que c'est un peu compliqué de faire ça avec de l'internationalisation, parce que ce que Zod permet de faire, c'est que quand on dit voilà ça, ça doit être un d'une longueur minimale de trois caractères.

Tu peux préciser le message d'erreur qui est levé. Si euh c'est la condition n'est pas respectée. et euh j'ai vu des gens se demander comment ajouter de l'internalisation avec ça pour ne pas directement mettre le statique message d'erreur. C'est ça en dur. L'idée c'est d'utiliser une clé, un peu euh, qui vient ensuite récupérer les choses qui sont dans ton fichier.

Mais

Paul: avec dix huit N, ça doit être plutôt faisable. Après, c'est vrai que ça nécessite une implémentation. un peu de ta gestion, des erreurs et là ou encore c'est un autre. Encore un autre sujet vachement intéressant je trouve, c'est le le stage strict euh de de tes de tes interactions avec tes fichiers de euh c'est-à-dire à savoir forcément taper une clé qui existe et que tu veux qu'il y ait une régression.

Enfin dans le compilateur lorsque tu pousses un truc qui n'existe pas ou en gros vérifier la synchronicité du entre ton application

Baptiste Devessier: et ton fichier de tra. Mais euh d'expérience ça c'est un peu plus compliqué quand t'es traduction, c'est pas juste des mots. comme par exemple c'est une phrase entière avec par exemple un aspect euh numérique c'est-à-dire que tu dis je sais pas Euh euh l'utilisateur a bien sélectionné x table un truc comme ça et ben tu veux que ton euh utilise bien la manière de représenter les nombres dans la langue et du coup tu dois mettre le X tu dois en faire une variable en fait ouais et table aussi ça doit varier selon tout ça.

et euh je crois ne pas avoir encore vu d'outils qui permettent de bien t'assurer que le paramètre X euh définir tes traductions soit forcément passé Quand tu utilises la traduction ce genre de chose, je ne suis pas sûr d'avoir encore vu ça.

Paul: Je vais pas me tromper, c'est ouais, c'est mais il me semble qu'il existe des clés.

Par exemple si tu veux mettre du pur ou du singulier en fonction du nombre de de champs qui ont été sectionnés par par exemple euh où en gros euh tu peux tu peux tu peux faire la PLU plu réalisation au niveau de la déclaration de tes clés je crois mais après ça de nouveau j'avoue je je m'y connais pas bien non plus mais c'est c'est c'est vrai que c'est des complexités que personnellement je pas sur des projets perso tu gères jamais quoi?

Parce que tu fais ton site en anglais en règle général personnellement

Baptiste Devessier: c'est en provençal, c'est toujours

Paul: mon site provençal. Heureusement je ne suis pas breton mais euh mais ouais carrément um et aussi euh ouais

Baptiste Devessier: dis-moi dis-moi Non mais c'est un un problème euh que j'ai pas non plus expérimenté grandement personnellement ouais la la traduction mais euh je me suis pas mal renseigné sur des librairies pour faire ça et je sais que le est vraiment un peu la la clé de voûte de toutes ces librairies pour qu'elles puissent mieux se vendre.

dans l'écosystème parce que c'est un point important, quoi. Et euh, une autre chose aussi concernant les traductions mais vraiment je vais pas m'étendre plus dessus parce que je m'en suis pas vraiment servi. C'est euh que quand t'es sur un très très gros projet, un très gros site c'est pas toi même en tant que développeur qui va écrire les traductions, c'est ce que j'allais dire des équipes qui vont du coup pas faire ça dans des fichiers gon Ouais mais euh dans des outils type type C M s pour euh pour entrer ça quoi?

Donc là comment après tu gères le le c'est encore un problème supplémentaire et je

Paul: préfère ne pas y penser dans notre cas euh on a des des traducteurs qui sur des fichiers Excel qui sont ensuite traduits dans des fichiers gon c'est vraiment euh vieux vieux vieux quoi! C'est pas forcément optimal mais par contre euh enfin après c'est c'est c'est qu'une histoire de décision mais ça serait nécessaire de de réf ce genre de truc.

En réalité je pense ça, ça serait un un en tout cas dans l'application. Après on n'a pas la problématique que t'évoquais tout à l'heure avec les variables ou en tout cas on a toujours fait cent je pense. Après je peux me tromper hein de nouveau j'ai pas très très bonne connaissance de cette partie. de de de notre code base et par contre du coup aussi il y a un autre point qui est assez important selon moi c'est euh faire attention euh à la compilation qu'on a de de c'est-à-dire par exemple dans le c D imaginons que vous soyez sur une angulaire euh et bien que vous fassiez un et que ou peu importe en réalité hein ce soit.

Peu importe la le le ne va pas faire foi concernant la totalité de votre application au niveau de, de de de de son typage c'està-dire que pour avoir des aires de les tests mais les tests ne sont pas buildé donc c'est pour ça que personnellement j'avoue je préconise ou alors de faire un bull des tests spécifiques à tu fais un t s C vraiment spécifique avec une extension de fichier qui qui vont englober tes tests et différents fiches de configuration peu importe ou alors juste de faire un t S C global avant de faire un pour éviter d'avoir.

Bah après en réalité même normalement tu tes tests et si t'as des erreurs dans tes tests bon ça peut dépendre vachement mais

Baptiste Devessier: euh il faut faire Pas sûr que si tu lances les tests avec geste, ça vienne checker les

Paul: types quoi Non non je j'ai un doute. et je je suis sûr que non dans la actuelle ou que j'ai moi en tout cas je ne peux pas le le dire pour tous les pour tous, pour toutes les pour tous les même si normalement ça ne devrait rien changer Euh mais en effet ouais je ça, ça ne le fera pas et on ne veut pas surtout défauts positifs euh dans ces tests dus à des mutations des moocs ou peu importe, il faut faire attention à ce genre de euh qu'un test passe toujours alors qu'il devrait plus.

Euh ce genre de truc quoi. donc ça veut pas dire que parce que les tests sont passés, il n'y a pas de régression ou d'erreur en cours sur les fichiers de test.

Baptiste Devessier: Enfin voilà, ça c'est euh c'est un sujet important. Et euh mais je crois avoir vu, je sais plus précisément je peux me tromper mais je crois que dans Adonis cinq euh le le le l'outil de même l'outil de de du système ne pas les types et qui recommandait de faire ça dans une étape supplémentaire.

Euh bah je peux peut-être me tromper mais pour justement faire que ton ton, ton génère sans T S C. Du code parce que T S C ne génère pas forcément le code que que tu veux exécuter c'est qu'il y a pas mal de projets même avec que TF avec vite ou quoi qui n'utilisent pas T S C. Pour de mais des outils

Paul: tout ça et ce dont je parlais la dernière fois aussi T S E P

Baptiste Devessier: Effectivement T S F.

Je crois que ça utilise dans interne. Ah oui d'accord

Paul: ça à noter que dans Ang seize je crois est maintenant disponible le bul avec ce qui est vachement bien. d'accord ou si on garde dix-sept ou seize, je sais pas, j'ai un petit doute, mais bref, c'est c'est un un sujet sympa. Mais euh, il faudra qu'on

Baptiste Devessier: peu

Paul: là dessus après, enfin je veux dire tout à fait hein, mais angulaire c'est top pour les gens qui viennent d'un écosystème un peu java et cetera tout comme en réalité hein.

C'est vrai que ça ça bah on ne peut pas leur enlever que dans leur direction et dans la vision de la programmation orientée objet et cetera. Bah ils sont très bons quoi C'est ça, ça fonctionne mais après c'est au goût et aux couleurs de chacun quoi carrément carrément carrément et bien écoute si tu si tu n'as rien à rajouter, je pense avoir fait tout mon petit tour et euh

Baptiste Devessier: c'est un sujet très intéressant.

Ouais j'espère qu'il nous en dira plus bientôt quand tu auras résolu ces huit mille erreurs de

Paul: alors je je ne résoudrai jamais ces erreurs entièrement ces erreur de non non non enfin pas dans leur entièreté en tout cas pas c'est pas l'objet en fait je vais jamais me faire une tâche qui va être de régler ces huit mille erreurs mais en tout cas de d'implémenter peu à peu des briques.

qui vont venir euh réduire déjà indirectement cette cette quantité d'erreur. Mais le gros problème c'est que même si tu viens régler ces huit mille erreurs manuellement, tu auras des régressions fonctionnelles quasiment indétectables sur des valeurs par défaut et sur des trucs. Enfin c'est des trucs qui viendront peu à peu et qui vont te bouffer ton temps à cent pour cent quoi ça veut dire que t'es

Baptiste Devessier: dans un peu un statu quo ou euh?

tu sais que t'as t'as ces erreurs? Euh tu sais qu'il faudrait les résoudre? Sauf que si tu les résous ça va introduire sûrement des ah oui euh qui qui étaient stabilisés? Euh par parce que le code actuel, même s'il est pas il marche Et donc euh il y a pas vraiment de de solution idoine quoi en

Paul: fait le le problème c'est que pour être enfin le site est déjà il est déjà il est déjà en prod Et pour éviter d'avoir des trop gros problèmes sur du de sprint quoi.

C'est toutes les deux semaines, il faut avoir plus de de confiance dans le réacteur, c'est pas possible d'arriver vers le métier et de leur dire Bon ben voilà, on va passer tant de temps là-dessus par contre ce qui est nécessaire et d'ailleurs après ça s'applique de nouveau qu'à moi, mais pour avoir confiance dans ta moi, il faut qu'elle soit strictement typée et correctement testée.

c'est-à-dire que avant de strict de venir faire un réacteur global de ça il faut vraiment qu'à un moment t il faut que je gèle le fonctionnel, le comportement fonctionnel de mon application euh mais vraiment fonctionnel c'est-à-dire je m'en fous de savoir comment il a implémenté mais je il faudrait en gros implémenter un grand nombre de tests d'intégration sur vraiment le fil rouge métier pour vérifier que ben sur un de réacteur technique, j'ai pas des régressions fonctionnelles pour mes utilisateurs quoi et ça dans un premier temps et aussi dans un second temps.

donc là vraiment, si je dois faire des pour pouvoir continuer à travailler sur ces huit mille, ça serait implémenter des tas d'intégration très cohérents et un second ça serait réf entièrement la gestion des services euh et comment on consomme de la donnée? Donc par exemple avec euh euh tu vois typiquement c'est tu peux nous expliquer ce que c'est.

En fait ça va plus ou moins, ça dépend exactement de ton implémentation. Je ne contrôle pas ma logique. donc l'idée ça serait vraiment de définir un contrat moi-même sur le basé sur le des que je consomme, pour que mon client puisse directement instancier un un service et qui soit strictement typé par la nature de de du contrat qui a été défini.

L'objectif normalement initialement. Euh ben en fait c'est pareil avec la libre dont je parlais tout à l'heure T S R S. Et T R PC je l'ai bien dit. Euh c'est vraiment un point pivot central entre ton client et ton front c'est-à-dire que tu viens versionner ce ce contrat? et lorsqu'il y a une mutation, ça va lever des erreurs triples logiquement, puisque c'est typé dans ton client et dans ton bac cest-à-dire que s'ils ajoutent la nouvelle dépendance à cette lib partagée, le contrat évolue et donc les données renvoyées par le le serveur devront changer pour fier au contrat de l.

Et le client devra aussi changer et de de en en ayant confiance dans la structuration et le typage fort des données que tu reçois déjà en entrée de ton site. Tu peux vraiment partir sur une nouvelle vision euh concernant ces huit mille erreurs de en tout cas c'est mon avis. mais ça peut évoluer de nouveau

Baptiste Devessier: d'accord.

Voilà, je comprends ton besoin de savoir où tu vas parce que si euh comme comme je le disais tu viens tout casser euh mais

Paul: c'est c'est le le gros souci quoi tu vois je parlais de code mort mais le code mort en réalité c'est pas juste un truc qui est exporté, jamais importé ou un fichier qui est jamais importé.

Peu importe le code mort, c'est aussi des champs qui sont consommés dans un objet qui n'est pas strictement typé. et dont tu ne peux pas savoir qu'ils ne sont plus là parce qu'en réalité tu t'en fous de savoir si y a un truc qui a un ou nul donc euh enfin c'est là on revient sur le donc c'est c'est là où c'est compliqué parce que tu peux pas avoir la la confiance de supprimer du code qui consomme une ligne qui est qui est strictement type enfin qui est qui est soit déjà pas déclaré dans l'interface de base de de de tatata ou qui est déclaré mais qui est déprécié en fait c'està-dire que c'est plus quelque chose qui est provide par les pierres et cetera donc et on parle de six cents ou sept cents routes consommées.

donc c'est des volumes que tu ne peux pas de nouveau gérer manuellement donc il faut chercher des options après de nouveau hein Je je tâtonne hein. Je dis pas que c'est la solution ou quoi? C'est ma manière d'approcher la complexité. Euh et la la la seule source de confiance que j'ai actuellement et encore, c'est pas exactement vrai, on en reparlera une prochaine fois.

Si si, ça vous intéresse, c'est euh l'aspect de mes que je constate. à savoir que si je dis que c'est pas exactement vrai parce qu'on a un entre notre client et toutes nos E P I. Sauf que c'est du java et qu'il n'y a pas de donc on n'a pas vraiment. On a perdu une abstraction de de connaissance métier.

Donc encore je parlais des désintégrations et du changement de protocole. Il faudrait aussi refaire entièrement euh ce ce B F F. Pour qu'il expose une une spec riche et qui permet d'automatiser plein de choses. Voilà. d'accord.

Baptiste Devessier: Enfin voilà tout à l'heure tu parlais de je crois qu'on peut générer euh un client depuis une tout à

Paul: fait c'est le S S Oui oui et d'ailleurs il en parle très très judicieusement il dit que si t'as pas le contrôle sur ton bac que si pardon si tu as le contrôle sur ton bac, ça ne sert à rien de je disais ça vaut mieux dire s euh strict enfin strictement typer les deux avec des outils faits pour mais audio c'est fait pour hein Là là c'est vraiment la conversion dont il parlait, lui en fait ce qu'il a fait comme outil, c'est il me semble que ça s'appelle.

Euh euh euh

voilà, en fait c'est vraiment spécifique spécifique au client. C'est un C un contrat en fait qui ne va être utile qu'à ton client. Mais qui est qui est génial? Hein? Ça a l'air vachement bien ce truc. Je vais vachement pousser ça et je j'en reparlerai. Enfin, j'aimerais bien évoquer ce sujet avec toi. dans le futur.

Baptiste Devessier: Enfin voilà. Parce que je je sais que y a pas mal de développeurs développeurs front qui génèrent les types pour enfin des des routes retournées par par le euh. Sauf que c'est juste des types quoi. Il n'y a pas de il y a pas de oui de validateur ou quoi? De

Paul: nouveau,

Baptiste Devessier: voilà que c'est c'est l'étape

d'après.

Paul: mais là c'est pareil en vrai c'est c'est l'idée de gagner du temps et surtout d'auto générer des choses et de pouvoir les synchroniser en temps réel quoi c'est ça qui est fou c'est-à-dire tu t'as vraiment eu plein de mutations sur ton sur tes p I. Bah tu génère de nouveau le contrat et si ton site est strictement typé correctement enfin ton texte est est bien ficelé, t'auras des erreurs qui vont se lever et t'auras juste à les régler et hop

Baptiste Devessier: ce qui me fait un peu peur, c'est au niveau du si jamais ton front est déployé avec une vieille version des types du bac et que le bac a été redéployé avec des surtout si tu utilises zod et que tu pars les trucs et que ça fera une erreur si euh les types ne sont pas

Paul: corrects alors euh ouais, totalement carrément et euh d'ailleurs, c'est pour ça que tu de enfin?

Ça dépend. Mais une complexité qui peut être de faire par exemple des sur ton serveur pour savoir si la version de ton front est bien en train de taper une version de ton bac auquel tu t'attends et si c'est pas le cas faire un par exemple ou dire au excusez-moi Enfin pas excusez-moi mais tu tu fais des des pour pouvoir faire une édition de cash ou ce genre de chose mais en effet ouais, c'est des c'est des problématiques à mon avis.

Euh j'ai enfin j'ai rencontré ce genre de problématiques parce que en réalité ça vient même pas juste de ton contrat zod mais juste de ton P I hein. c'est-à-dire que si t'as un client, ça peut arriver pour n'importe quel système en réalité, hein. mais du coup, je enfin je crois. Je suis quasiment sûr qu'il y a des paradigmes qui ne sont pas spécifiques à zod mais qui pourront s'appliquer très judicieusement à ce genre de situation.

Baptiste Devessier: Parce que là, toi tu parles du du fait ou c'est un problème de cash mais ça peut aussi être juste que le le front n'a pas été des choses comme ça. Bon après

Paul: si c'est une erreur humaine de déploiement euh on est d'accord si ça

Baptiste Devessier: a pas été redéployé automatiquement Ouais voilà, et après tu peux avoir des problèmes de avec ton service.

Des trucs comme ça, c'est la Jos du ouais

Paul: ouais ouais mais après si tu haches bien ça dépend comment tu travailles ton tes assettes enfin ton client si t'as un C dans un c d N tu peux faire de la purge et ce automatisé avec du hash sur les noms des fichiers et cetera quoi! C'est pour ça que quand quand t'es bulle de une application le nom des fichiers un peu quoi.

Enfin c'est ça, ça dépend, ça dépend vachement ça c'est

Baptiste Devessier: un autre sujet. Voilà, je suis moins confiant. Enfin

Paul: bon et ben écoute Baptiste, je te remercie de de cette cool discussion sur et c'est une déclaration d'amour qu'on lui fait. Merci à toi

Baptiste Devessier: Paul, Merci pour ta

Paul: connaissance ou pas que la mienne hein ton

Baptiste Devessier: expérience.

Ouais, c'est ça qui est important.

Paul: Allez, je te remercie et à la prochaine à la prochaine Paul,

Baptiste Devessier: Allez Tia!