Colin McDonnell - Zod, tRPC, EdgeDB
Durée: 77m55s
Date de sortie: 27/05/2022
This week we're joined by Colin McDonnel, the head of devrel at EdgeDB a relational database with an object-oriented data model and a powerful queru language.
Colin is also the creator of useful TypeScript libraries such as Zod and tRPC.
Tooltips
Andrew
Justin
Colin
Ce que nous faisons, c'est que nous générons ce quiribilder
par introspecter votre schéma,
comme de votre database live,
pour tirer tous les types d'objet dans votre schéma
et leurs propriétés et comment ils se lient à l'autre.
Et puis vous pouvez juste commencer à construire les quiris.
Bonjour, bienvenue au DevTools FM Podcast.
C'est un podcast sur les outils de développeurs
et les gens qui les font.
Je suis Andrew et c'est ma co-host, Justin.
Bonjour à tous.
Aujourd'hui, notre guest est Colin McDonnell.
Colin est le chef de relations de développeurs
à l'HTB et le créateur de Zod,
qui est un library de validation touchs.
Il a aussi créé TRPC
et nous avons parlé à Alex Johansson
en début de l'épisode 21 sur ce sujet.
Colin, c'est vraiment incroyable de vous avoir ici.
Je suis vraiment excité pour cette conversation,
surtout pour un grand fan de Zod en particulier.
C'est génial de vous parler.
Est-ce que vous voulez nous parler de votre part?
Oui, bien sûr.
C'est génial de vous parler.
Merci beaucoup pour vous avoir regardé.
Ce show a vraiment explosé
sur la scène.
C'est génial de vous voir.
Il y a beaucoup de demandes
pour avoir des insights
sur comment l'OSS
se passe et les gens sont derrière.
C'est donc un grand chacune pour moi.
Merci pour ce que vous faites.
Oui, je vais voir.
Sur le front de TRPC,
juste pour donner à Alex la croissance,
je fais un concept de croissance.
C'est très rapidement.
Vous pouvez encore aller en bas et voir ce que ça ressemble.
Il a fait le tour et il a vraiment regardé
ce que c'est aujourd'hui.
Il a aussi travaillé sur quelque chose
avec les mêmes goals de design
déjà sur sa zone.
Je pense qu'il a reconnu
la valeur de la croissance
et de la croissance de TRPC,
un petit peu de l'application de l'OMN.
Et aussi l'approche que je faisais.
C'était un grand épisode.
Je vais donc vous rappeler
que j'ai eu de plus de usage de TRPC.
C'est une des choses
que j'ai fait plus...
C'est un peu plus grand.
C'est encore plus important
de faire des applications
de type safe
sans quelque chose comme TRPC.
Et de la plomber du terrain
avec des routes de l'API
ou des trucs de la rétour.
Et puis de passer à votre
page de la page.
Et puis de passer à votre page
Et puis de passer à votre page
Je vais donc vous rappeler
que j'ai fait de plus en plus
de la note que vous avez envoyée.
Vous avez mentionné que vous étiez
part de la classe YC19.
Et je l'ai remarqué que ça a
été le final de vous en étant un nom digital.
Qu'est-ce que vous avez fait
cette idée de YC?
Comment avez-vous été là?
Et où est-ce que vous êtes là?
Oui, pour sûr.
Je suis un peu contrarien.
En arrivant à la collège, je l'ai étudiant en 2016.
Et j'ai essayé de
m'aider à
prendre un path intéressant
par ne pas avoir un travail
pour...
J'aurais dit que
je ne me recommanderais pas
de cette route.
Mais j'ai naturellement
étudié le nom digital
en YC19.
C'est un peu plus
un path de route de l'année 2016-2017.
C'est quand YC19 est un peu
plus grand.
C'est un endroit fun
et je
apprécie la idée de
faire des softwares
qui font du monnaie
et ne pas essayer de
être un founder de la StarCup.
J'apprécie
un degré de pragmatisme dans la communauté.
Mais
les choses que j'ai endurées en travaillant
sont assez dames.
J'ai l'impression
que si je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis un degré de pragmatisme
et que je suis certain que
pour moi vous avez fait un état
des faits absolues
deschn에요
deschez, avec la losers
des鐵 lignes
des spacecrafts
Europe
et en attending
EC a justement dém estructuré
d'envoyer une approche qui est en train de faire des pratiques qui ne sont pas d'insurance
et qui n'a pas d'insurance, et qui a un modèle de membership.
Donc, c'est un peu sassage,
comme ça,
mais ce fait de membership qui vient de l'accès
est comme leur source d'accès,
d'accès à la révenue,
et puis tout leur service qu'ils ont donné,
ils les ont donné à la faute,
comme la faute de la paix possible,
et ils ont aussi essayé de négocier des rates de cash
sur les médicaments,
qui peuvent en fait être vraiment chers,
si vous ne payez pas d'insurance,
et la même pour les x-rays,
et des scans comme ça.
Donc, tout à fait,
je pense que c'est un modèle intéressant,
c'est maintenant un peu de capteur,
parce que vous ne pouvez pas,
cette 75 ou 100$ par mois,
de tout le monde,
c'est adapté par rapport à la coste de votre insurance,
mais ça ne se sent pas de cette façon,
parce que ça va tout se passer
par rapport à votre insurance,
qui est usually paid for by your employer,
et vous n'avez pas de la paix au-delà de ça.
Donc, il me semble que vous
devez payer deux choses en fait,
et c'est un peu de la faite,
à l'époque, mais c'est encore
un peu de la paix,
mais en fait, la vraie
idea de la start-up est de
construire la plateforme de software,
pour que les options existantes
ne servent pas très bien,
parce qu'ils ont besoin d'un
carte crédite, style,
management de la membership,
comme les softwares de sas,
ce n'est pas quelque chose qui est
bête à votre grand software de
médicale, comme vous le probablez.
Et donc, je pense que ça
serait assez d'un angle,
pour commencer à construire
un software qui serait spécifiquement
appuyé à cette communauté sub,
qui en même temps était peut-être
500 pratiques nationaux.
Je suis certainement drawn
à cette idée, parce que c'est très petit,
et personne n'est pas
vraiment construit pour ça en même temps.
Donc, je n'ai pas aimé
beaucoup de... C'est un
genre de preuve de la réplique,
d'une idée de start-up,
mais en fait, dans la interview de YC,
je me suis dit, je n'ai pas pris
cette étude de growth pour les
pratiques d'un nombre d'applications d'OBC,
qui en même temps était, oh,
il y avait 200, et puis 400
d'un an, et puis 600 maintenant.
Et je me suis dit, naturellement,
nous allons placer ça sur un curve
exponentiel, et dans 10 ans,
il y aura chaque pratique en Amérique,
mais en pratique, c'est de la
perfection, pas exponentiel
à tout, mais
il n'y a pas besoin pour YC, pour savoir
ça dans la interview.
Et où est-ce que ça finit ?
Tu as fait le start-up,
je ne sais pas vraiment ce qui s'est passé
avec YC, si ils investissent,
il y a rien de ce qui s'est passé,
tu peux juste passer?
Ouais, le start-up est correct.
Donc, je faisais YC, le 19e,
donc en janvier, au mars,
et puis j'ai été au bay,
et j'ai went à San Diego pour essayer
de le faire pour un moment, et
baisiquement en septembre,
donc 9 mois en train de travailler
sur ce software comme un solo-dev,
je n'ai pas
pas pu le faire,
je l'ai fait tout de suite, et j'ai
n'ai pas eu de motivation pour le faire.
Le plus grand que je faisais wrong,
c'est pas de la courte et de la règle,
à ce point, je dirais,
parce que je n'ai pas
de pouvoir le faire, je n'ai pas
de pouvoir le faire, je n'ai pas
de pouvoir le faire, c'est un liste
de 2022,
mais
c'était un grand projet,
j'ai fait 40% après 9 mois,
et je suis le fait de
faire une réalisation,
d'une longue période,
pour faire le faire,
et je me suis fait des décisions
de la réplique,
en regardant le ordre de Zod,
qui a fait
une réplique
moins stable en temps,
comme une complexité,
et maintenant, le tooling est
un très fantastique
type,
très structure,
mais pas de la temps,
et oui,
en septembre, je ne l'ai pas
fait actuellement, mais je me suis
toujours poutré,
en essayant de me faire
travailler sur les projets,
pour essayer de me faire
travailler sur le terrain,
plus régulièrement,
en ce qui était Zod.
J'ai allumé
cette décision de la technologie,
j'ai essayé de construire
tout cet ordre,
sur Neo4j, le database graphique,
qui ne s'est pas
vraiment intérêt pour
l'application de la back-end,
vous allez à leur site,
et ils disent, graph databases, c'est génial
pour les analytiques,
et pour les importers de ces gros,
blocs, des databases structurels,
mais d'être capable de les contrôler,
parce que c'est totalement schémaliste,
vous avez juste des nodes et des égages,
vous pouvez attacher des labels
pour les nodes,
et des propres et des choses comme ça,
mais,
à la fin de la journée, parce que mon database
n'a pas de sécurité,
pour moi, en le manière dont
je voulais un database relationnel,
j'avais besoin de
être très attentionnée,
pour que ça soit conformé
à tout ce que j'ai
attendu, et à ce que
mon code de application m'a
attendu, et donc, comme vous le
dîtes, je suis très direct,
j'ai commencé à jouer
avec différents libraries schémales,
pour valider mes
réconquances et faire surement
que les modèles
de la surface
sont conformés
à ce que j'avais apporté,
avant que je ne l'aie pas apporté,
et j'ai
des problèmes avec
les égages de tous les libraries,
à ce moment,
il y avait YUP, joy,
qui n'a jamais été vraiment la plus
de type script, et puis,
IoTS est une grande chose,
et j'ai un schmad
d'autres, comme Superstruct,
par le legendaire Ian Storm Taylor,
qui était aussi toujours
toujours tenté de être un peu plus minimal,
moins plus profond, mais c'est
toujours une très façade option
pour les gens qui sont
prioritisés sur la performance
d'expression.
Je suis devenu un peu
j'ai commencé à faire Zod,
il y avait peut-être
une et demi des features
que Zod a inclus,
qui étaient vraiment les plus
principaux points de discrimination
entre les autres,
quand j'ai publié,
c'est-à-dire,
j'ai eu un style IoTS
où vous importez le library
comme une variable, comme Z,
et IoTS, vous importez le ST.
IoTS était
presque parfait, d'exception
de la façon dont il a été
très difficile de déclare des objets
avec des fields optionnels,
où vous avez dû
couper le type d'objectif
dans les propriétés
et les non-réquires,
et puis, unir cela ensemble.
Zod a fait une décision
qui est vraiment
incroyablement controversée,
qui est que
dans votre schéma d'objectif
vous pouvez faire Zod
par unes-vous
en faisant le nom
Zod
d'optional
et cela va être
un property optionnel,
et je veux dire que dans un type
de type,
c'est comme si vous déclariez
un type d'objectif,
qui signifie que
quand vous faites
un objectif qui s'enforme
à ce type, vous pouvez juste
laisser le nom de l'username
mais vous pouvez juste laisser
cet objectif tout à l'heure
si vous avez eu ce question
qui
a fait un controversat
pour le type script 4.6,
parce qu'ils ont introduit un type
d'objectif exact,
comme un flag que vous pouvez enlever
dans les configs TS,
qui est... Il y a maintenant
trois types de optionnelities,
trois différents sens
dans lesquels un objectif
peut être optionnel en un objectif type,
donc vous pouvez avoir
un nom, un question mark, un string
ou
un string
ou vous pouvez laisser
cet objectif tout à l'heure,
vous ne pouvez pas assigner
l'un de l'autre,
dans ce nouveau type d'objectif exact
donc vous devez enlever
un nom, un question mark, un string
ou un défunt, si vous voulez
assigner cet objectif,
et puis la troisième option
serait de se faire attention au question mark
dans lequel cas vous devez assigner
l'un de l'autre, et vous ne pouvez pas
laisser cet objectif tout à l'heure, donc c'est
ce type de 2x2
avec optionnelities,
où il y a la version de optionnelities
et puis il y a
l'un ou l'autre version de optionnelities
et vous pouvez faire l'un ou l'autre
ou l'autre, et Zod
n'a qu'une conception de l'un,
qui en ce cas
c'est la version
qui a
l'un ou l'autre, donc vous pouvez assigner
l'un ou l'autre
ou pas tout à l'heure
et oui, c'est maintenant
ce qu'a été ouvert, le jour
type script 4.6 a landé, et vous devez
dire que ça ne peut pas aligner
avec des types d'objectifs exacts
et c'est un truc qui s'est fait
je n'ai pas vraiment
un fix, c'est
maintenant construit et structuré
à Zod, donc je ne sais pas
c'est un part
de l'involvement type
système, c'est comme quand vous faites
assumptions basées sur
comment la version type s'y opérate
pour le plus
progress, c'est été
dans la direction de plus de convenience
pour moi, avec les choses de la raison
et les choses de plus en plus
récursives, types conditionnels
et des choses comme ça,
j'ai dû utiliser ces hacks
que le type script, le team
l'a explicitement condamné
pour faire des choses de la sorte
peut-être que vous ne devriez pas le faire
mais maintenant c'est tout
pour le plus grand part
bonbon
donc, une des choses que je pense que c'est
très vrai de développement en général
et c'est un question
d'intéressant pour vous parler
de votre expérience de votre startup
c'est que, il y a beaucoup de complexité incidentale
dans les appes de construction
et beaucoup de fois, on va essayer de
les consacrer et vérifier
les types entre différents
laires et nos systèmes
donc c'est comme
vous avez les types dans votre database
ou pas, comme
le Neo4j case
et puis vous avez les types dans votre système de back-end
types pour l'API, types pour votre système de front-end
et c'est comme, dans le worst case
tous ces types sont différents
ou dans le worst case
ils sont tous très très lourds
donc c'est où les choses
comme Zod
peuvent vraiment aider, en tout cas
dire, je vais prendre
ce bloc de l'accessible
mais c'est comme je l'ai prévu
pour être formaté ou quoi
donc je suis curieux
si ce problème
c'est vraiment
donc
évidemment, le Neo4j
expérience est un grand
inspiration
pour Zod, mais est-ce que
ça a aussi disparu
votre expération et le TRPC
l'arrivée prototype
et c'est-à-dire que c'est quelque chose
que vous pensez encore plus holistiquement
que même juste comme le Zod player ?
oui, avec certaine thé, je suis curieux
le building de Neo4j
n'était pas le seul problème
avec comment je faisais ce
complexe de médicaments
avec 100
types de données
je suis commencé
à la construction
je suis dans le long
et je vais le faire
et je me suis procédé
pour faire les choses de la même manière
je ne sais pas
j'ai construit mon propre
semi-typed ORM sur Neo4j
qui m'a fait faire des choses
en un de la manière painante
qui n'est pas
particulièrement painante
mais c'est pas grave
mais ça me fait
avoir un ORM laire qui me donnerait
un type de résultat
d'exception, avec des quotes
parce que les propriétés
n'étaient pas les mêmes
mais les relations entre les nodes
je ne sais pas comment je l'ai terminé
je n'ai pas assez de typescript
pour imprimer ça
je pense que c'est pour ça
et donc, non de
les propriétés sur les apis
que j'ai sur mon client
j'ai eu
des types sur eux
qui étaient un grand contributaire
pour cette
instabilité de grosses
complexités
et en temps, je me sentais que tout ce que j'ai fait
c'était de la run-time
et pas même le typecript laire
et je pense que l'application de typecript
quand vous avez la saison de type
c'est que votre base de code
s'est très crystalline
tout ce qui va faire
vous le dira tout d'abord
avant d'enclencher ce point
et ce que je pense
de base de code
c'est un truc que, comme résultat
de cette expérience d'experience
j'ai été allergique à tout ce qui ne me sentait
complètement type-safe
et c'est ce qui a été un peu élevé
après que j'ai arrêté de travailler sur ça
et j'ai commencé à jouer avec
de la façon
de construire un type type-safe
un application très dry
c'était
un
effort multi-month
et Zod était le premier qui a fallu
et TRPC a suivi
swiftly
c'était la motivation originale
qui est une personne de mon ami
qui a construit un projet petit
qui s'appelle Obvious RPC
qui n'a pas
de notion de
un router
ou de trouver les routiers
par application de deux calls
c'est tout un système
filé
ou vous avez
vos fonctions
que vous décleniez sur le service
et vous pouvez importe
cette grande hierarchy
de fonctions
comme un type
et c'était avant
import type c'était un truc
vous pourriez importer
tous les fonctions clientes
avec un import dynamique
vous pourriez
constater client est type import
parenthésie
et importer tout
de votre hierarchy
de fonctions service
c'est certain que vous avez checké Obvious RPC
sur GitHub
c'était un inspiration
pour ce niveau de la sécurité
et il y avait
des choses aussi
que j'ai aimé dans le graphQL
où ils feraient
l'automatique normalisation
mais Apollo
fait ça
où les données qui sont de votre graphQL API
sont pour un
onlys for one copy
d'un objet
sur votre client
et donc, comme des payloads
de différentes URLs
on peut voir le type name
et le id et
automatiquement
les sources de vérité pour cet objectif
j'ai emblendu un projet
qui a fait quelque chose similaire
et je pense
avec la combination
de Zod pour valider les inputs
TRPC pour impliquer
votre API dans la sécurité
et puis, un client database
qui vous permet
de mettre des trucs
de votre database
sans avoir besoin
de vous inquiéter
sans avoir de la validation
quelque chose qui fonctionne
et qui inferne le type de votre query
Prisma est le nombre d'obvious que j'ai fait
pour le premier temps
même si le build de query que je travaille
sur le GDB est
l'une des d'autres d'autres
et c'est la combination de
l'intérêt de la sécurité
et le type de la sécurité
donc, la combination de ces 3 choses
c'est comme cette trifecta
et je pense que
même avec TRPC
en augmentant beaucoup
les gens ne sont pas
nécessairement construits pour quelque chose
qui est totalement type safe et totalement dry
mais je pense que nous nous sommes en la bonne direction
quelque chose qui est intéressant pour moi
est l'idée
d'une sorte d'application implique
et vous pouvez
voir ça arriver en métafoie
donc, le premier qui me
fait partie est le travail que Blitz.js a fait
pour faire
pour que votre client importe
votre code de service
et ça automatique
construit un client de RPC
pour que vous soyez derrière les scènes
et le build que vous ne voyez pas
le seul caveat c'est que vous devez faire sure que les choses que vous êtes retournant
soient serialisées
ou des choses
mais ils ne tentent pas de
faire des APIs
si vous savez ce que je dis
ils tentent de réduire l'overhead
de
former un type
et de
faire partie du type et comprendre
ce qui est venu
si vous avez un système
qui est un système de map
entre la frontière et la back end
c'est un système unifié
vous pouvez avoir cette back end pour la front end
c'est unifié
c'est bien
c'est difficile de faire ça universel
et je suis content
pour les tools Zod et TRPC
qui vous met
où vous êtes
et qui vous aide
à construire ce que vous avez besoin
surtout dans les systèmes traditionnels
les APIs REST
Zod est de la fin
mais je suis très intéressé
à entendre plus de votre travail
sur le code et le code
cette langue query
que vous êtes en train de travailler
et comment ça se fait
pour cette histoire
oui, pour sûr
sur les appareils d'appareils
je veux donner des crédits
pour les Blitz
ils sont très d'abord
sur cette notion
de système 0 API
ce qui a pavé
un peu plus d'appareils
une fraction non triviale
des gens qui ont trouvé Zod
ont trouvé le Blitz
je ne peux pas
le Blitz m'a aidé
et je pense que c'est
un peu pivite
je suis intéressé
à voir comment ça s'est fait
dans cette nouvelle époque
de la guerre de framework
qui nous a appris
je leur ai demandé
à l'opensant
juste un petit piece
c'est à l'aise
mais c'est très spécifique
je ne pense pas
que le rébondissement
de l'exemple
de Blitz est probable
je pense que le fact que vous vous
vous portez
des modèles spécifiques
pour construire un stack
est une partie de pourquoi le système de travail
est tellement d'ici
les concepts
conceptuel
les concepts
de la développement web
comparé au système python
pour les plus
c'est toujours la température de l'HTML
ou
les PHP sont dans ça
mais elles sont définitivement
toujours la température de l'HTML
et les props de l'HTML
mais oui, le rébondissement est
impossible de ne pas
se défendre
un peu
et de ne pas se défendre
de cette manière
oui, donc
j'ai travaillé à l'HTML
depuis un an
et ils ont vraiment
joué
pour me faire le bon moment
ils ont trouvé un peu de gorge
juste sur internet
et ils ont identifié
un projet très non trivial
un projet très très proche
avec beaucoup de génériques et types
et de type renforces
et ils étaient en temps
et encore maintenant
en regardant un type script query builder
pour l'HTML
qui s'appelle EdgeQL
et j'ai regardé l'HTML
et j'ai dit
ok, c'est
la façon dont les choses doivent aller
parce que c'est un
language full-fledged
mais ça fixe
chaque
concern de l'usability
que j'ai avec SQL
pour que je sois un développeur
et ça fait beaucoup de bonnes idées
de GraphQL
qui est fascinant
vous avez des styles de GraphQL
de la forme
d'HQL
pour expliquer les fields
vous avez des users
et vous vous mettez dans des braces
et vous passez dans des listes
de propres que vous voulez faire
c'est aussi
pas relationnel
dans le sens que vous n'avez pas
un peu de tables flat
qui peut connecter à l'autre
avec des constraints foreigns
c'est très
vous avez écrit votre schéma
de la façon dont vous vous write un interface type
c'est objectif, vous avez
votre type d'users et
peut-être un poste qui correspond
à un liste de blog posts
et c'est
un database
qui conclutifement
solve les problèmes que les ORMs
tentent de solver
et ça fait tout ça dans le database
où vous avez un schéma objectif
et vous pouvez faire des choses
j'ai mentionné le style de la collection GraphQL
et vous pouvez faire des choses
de la name et l'email
d'un user et aussi
de les postes que c'est linked
et puis des postes
et c'est tout
c'est comme des shapes nestées
dans votre query et donc
vous pouvez pas avoir plus de joins
parce que vous avez
un schéma objectif
qui est vraiment facile de faire des queries nestées
et de la fin de la jante
des choses qui
font que
d'autres non triviales queries
sont très intimidées pour quelqu'un
qui vient de faire un JavaScript
ou vient de faire
très bien dans le monde objectif
donc vous travaillez sur la language query
où est-ce que
quand vous avez commencé à l'EdgeDB
et que vous avez appris
à la language query que vous avez pas été là-bas
donc la language query
SQL en itself est déjà assez mûte
à la fois que je suis là
et mon travail est
pour écrire la version
type script de l'EdgeQL
qui vous permet de écrire vos queries
en fait
il y a un moyen
d'écrire les queries en mode
de façon de façon de la façon de la façon de la façon de l'EdgeDB
si vous avez utilisé un database de SQL
vous vous initieraient
et puis vous écrivez vos queries
comme des pièces
qui vous ont fait des sources
qui vous sentent un peu bizarre
vous avez des islands de SQL
qui ne sont pas syntaxes
highlights, il y a de la gataillata
et vous devez encore le mettre
en place de la signature type
si vous avez utilisé le client type script
et donc
on génère
cette build-up de query
par respecter votre schema
de votre database live
pour écrire tous les types de objectifs
dans vos schémas et les propriétés
et nous avons également écrire
toutes les fonctions de l'EdgeDB
qui ont un whole standard library
de fonctions
un whole type system de sa propre
que nous essayons de représenter
en type script
et puis on génère
une très similaire désade
où on génère un bunch de code
vous importez tous comme un objectif
appelé E conventionaise
et puis vous pouvez commencer
à écrire les queries
vous pouvez faire des options
qui sont comme un fonction
et le 1er argument de cette fonction
c'est les types d'objectifs
qui vous ont fait et donc les usages
En fait, l'argument deuxième est une fonction de la fermeture.
Ça vous donne une façon de...
Cette fonction s'adresse à un objectif qui spécifie
tout ce qu'il veut faire,
ainsi que ses filtres, ses ordres, ses limites,
et toutes ces différentes clauses sur votre query de sélection.
C'est quelque chose que je suis fiers de,
quelque chose comme le Prisma.
On a fait cette approche agressive
où vous avez un second argument,
qui est juste une fonction qui s'adresse à un objectif.
C'est un objectif par farameter.
Et à l'intérieur de cette fonction, vous spécifiez les filtres que vous voulez sélectionner.
Vous pouvez aussi faire cela de la graisse,
vous savez, faire tout le blog de l'utilisation des postes,
vous pouvez aussi inclure des propriétés compétitives
que vous pouvez définir.
Donc, la raison pour laquelle ce second argument
est une fonction qui s'adresse à un objectif
plutôt que juste un objectif,
c'est que vous pouvez prendre l'argument de cette fonction,
et cela vous donne une variable que vous pouvez utiliser
qui est un référence au scope du currently,
à l'objectif de l'utilisation.
Vous vous appelez quelque chose comme « u »
et vous pouvez référer à un nom ou un email,
faire des modifications pour ces fonctions
avec des fonctions de la graisse,
des fonctions de conversion,
ou si vous voulez faire quelque chose comme
« count » le nombre de postes que l'utilisation a écrit,
vous pouvez faire cela avec « e.count »
et puis passer à cela comme « u.blogpost »
et vous pouvez écrire,
vous avez l'accessoire à cette langue de query de l'HQL,
et cela est tout représenté en type script.
Et puis, à l'endu de l'année,
les résultats de ces queries sont complètement type.
Et le plus vous commencez à utiliser quelque chose comme Prisma,
le plus vous commencez à être au contraire des limites,
et je me souviens d'être satisfaits avec Prisma,
et je le vois des gens qui sont complètement,
mais en temps en temps,
on est en train de se faire reprendre à un monde où
beaucoup de ces choses ne sont pas les meilleures pratiques,
les choses que vous avez à faire avec Prisma,
ou vous devez peut-être exécuter plusieurs queries
en série, pour faire les données que vous voulez,
par exemple.
Ce qui fait que,
en façant le nombre de blogposts élus par un user,
je pense que c'est peut-être maintenant supporté
avec ce compte underscore API qu'ils ont donné,
comme de très rapidement,
mais on veut dire que vous voulez
compter le nombre de blogposts
sur un filtre,
comme le nombre de posts publiés,
ce serait un des événements évidentes.
Vous ne pouvez pas le faire en Prisma.
Et puis,
je sais que ce sont des dégâts du système de dégagage,
donc la performance est rarement
la main chose qui est en train de faire des décisions,
mais quand vous commencez à regarder,
si vous vous regardez sur le blog de Prisma,
vous voyez les queries de SQL
que vous avez émettie à votre database.
C'est...
C'est remarquablement négatif, je pense.
Tout le niveau de dégage dans votre query,
dans le cadre de la fête de nest,
chaque des desquiers est map à un autre query
qui doit être exécuté en série.
Les queries sont très verbose,
où il fait comme la chose de votre top niveau,
qui fait comme une liste d'users,
qui prend toutes ces idées,
et qui dropent tous ces deux niveaux de queries
pour faire comme tous les posts de blog
associés avec les utilisateurs, avec ces idées,
et qui fait comme un troisième niveau
pour faire comme les commentaires sur ces posts de blog, ou autre chose.
Et, vous savez,
si vous avez comme une quantité de latences
entre votre service,
où cette query est exécutée,
et votre database,
vous savez, ça a un outre multiplicatif,
où une query simple,
une query polygne,
va require 4 à 5 round trips,
parce que vous devez...
Toutes ces queries individuelles
qui sont exécutées,
vont aussi être élevées dans une transaction.
Donc, vous avez des transactions en start et en transaction.
Et donc,
les non-trivile queries
ont besoin de 4 à 5 round trips.
Et je l'ai appris quand j'ai appris,
et j'ai appris relativement récemment,
parce que nous travaillions sur un benchmark
sur l'EdgeDB,
pour essayer de capturer
des personnages de ces personnages.
Et je n'ai vraiment pas réalisé
que ça a été un prisma
qui a fait quelque chose sous la haute.
Donc, la performance est certaine de la considération.
Je préfère personnellement
de prioritiser des performances d'EdgeDB,
et c'est pourquoi
je suis aussi prête
de dire que je pense que l'EdgeDB est mieux,
en termes de pouvoir exprimer
quelque query que vous voulez exprimer,
et ne pas être limité
à l'API qui est un crud,
que le prisma,
ou quelque sort de l'or,
vous aille vous faire sortir de la boxe.
C'est très intéressant
de voir comment la transition naturelle,
et que cette roule est
de votre passé.
Vous pouvez voir
l'expérimentation avec Neo4j,
et le pain que vous avez ressenti,
et la création de Zod.
Et maintenant,
ce que l'EdgeDB
est comme
l'ultime,
c'est que
je ne veux pas cette type de santé,
mais je veux que dans mon database,
et en plus,
en fait,
au niveau de la schéma.
Je pense que c'est intéressant,
parce que
je l'ai parlé d'aujourd'hui,
mais
c'est toujours des abstractions,
ou généralement,
c'est des abstractions,
et elles ne sont pas malentendantes.
Le problème que vous parlez de prisma,
et des performances de query,
c'est que
prisma est en train de
des bases potentielles
et potentielles,
et elles créent
un schéma générique
qui peut targetter
différents types de databases
avec différents types de
optimisations.
Et
je pense que
beaucoup de fois,
c'est un peu
de la compagnie d'ORM,
ils vont prendre
un approach naïve,
parce que
parfois,
en escrivant un optimisme,
la query
d'optimisation
peut être assez difficile,
et B,
ça justifie un knowledge
que peut-être vous n'avez pas
à l'heure,
ou peut-être c'est vraiment
expensif pour déterminer
ça,
c'est comme
cette abstraction lecquie.
construire un
database est intéressant.
Bien sûr.
Découvir un ORM,
j'ai
beaucoup de compassion
pour quelqu'un
qui a un travail,
ou qui s'étendait
pour essayer de le faire,
parce que
vous êtes sattus
avec cet
problème de détermination
où
vous
besoin de
travailler
dans les restreints
de l'une database,
mais les restreints
de tous les databases
que vous targetz.
Donc,
il y a
quelque chose
sur l'HGB
que je dois mentionner,
c'est que ça
tourne comme un layer
sur le postgres.
Donc,
on essaie de l'abstracter
pour vous.
Vous pouvez utiliser
l'HGB et
l'abstracter d'une instance
et ça
créera
l'instance postgres
sous la coude.
Mais,
oui,
l'HQL
est converti
dans un SQL
par un compiler
Le processus
d'HGB
est complètement statel.
Et
votre
schéma
que vous déclarez
avec le
language de schéma
de l'HGB
est
reflétisé
dans une
formule
relative
sous la coude.
vous savez,
on
encore
en profite
de la performance
du query
en postgres
et
de l'schéma
très
fort.
Mais
l'HGB
ne devrait pas
travailler
si on
t'aimait
quelque chose
sur le postgres.
Il y a des
features
que nous
utilisons
et qui sont
vraiment
disponibles
dans le postgres.
On
ne peut pas
retirer ça
même sur le SQL
ou le Mongo
ou tout ça.
C'est
un
grand
bénéfice
de notre
capacité
de
créer ces
features
par
ne pas
avoir à
ne pas
avoir à
avoir à
ne pas
avoir à
Assurer
ce scratch
en
feu lola
CODE
CRES
S
E
Y
Y
Le mapping est très bon pour un perspective user.
Oui, juste une certaine set de conventions pour tout.
Prisma, je pense que je ne les envoie pas.
Ils ont besoin de délinier les fonctionnalités disponibles
maintenant sur le Mongo versus sur les base sequels.
C'est un problème très difficile,
juste d'un point de vue de structure et de documentation.
Oui, je suis content de les faire.
Je me suis dit que je suis sur post-grasse.
Je vais juste changer ça pour être de sequelage.
C'est une feature que tu utilises, ce n'est pas supportant.
La autre sort de challenge,
avec Prisma, tu as écrit un file de schéma.
Des propres de la team de Prisma,
ils ont construit beaucoup d'aménages,
surtout autour de la création des schémas.
Mais tu as écrit un autre schéma,
et ça peut techniquement générer le schéma de database
ou quelque chose dans la haute,
avec des magiques.
Il y a deux schémas qui sont différentes
que tu as en ce moment.
C'est un truc que tu es très conscient de.
Oui, sans doute,
on a pris des cues de Prisma
et continuons de faire ça,
en termes de DX,
c'est un peu pionneur.
Le fait que c'était une orme
qui a découvert sa propre language de définition
de schéma était très bon.
C'est important pour ce qu'ils veulent faire.
Nous avons la même chose.
Avec le plus grand défi
sur le bénéfice,
c'est que dans le schéma d'HTB,
tu as l'accessité à la faible
de l'HQL,
comme la language de schéma.
Donc, les choses comme
mettre des fields de computing
dans le definition de schéma,
c'est possible.
Prisma a aussi
une bête très drôle
où ils doivent faire une balance
entre leur abstraction objectuelle
et leur abstraction relationnelle.
Ils savent que ça doit être le plus lec,
où les gens vont falloir
réunir le ROS SQL.
C'est la origin
de cette décision qu'ils ont faite
pour que tu la déclare
encore un peu
des quarts et des quarts.
Tu as donc un point d'autor
ou d'autor de field
qui est un type d'usage.
Tu dois aussi mettre un id
et dire que la relation d'autor
devrait être utilisée
par ce field d'autor.
Ils veulent que ça soit explicit
dans le schéma
pour les gens qui
vont falloir
réunir le ROS SQL.
La solution
pour que la abstraction
de l'objectif de l'objectif
sur le SQL
soit la goal de l'HTB
depuis l'outil.
C'est extraordinaire
et difficile.
Les choses
que nous faisons
pour générer le SQL
qui
retient
un objet
de l'objectif
qui est un peu
familier
qui vient de l'OML.
C'est un peu
un peu plus
plus d'impos grève
car nous devons faire
des subqueries
pour
faire des queries
de l'objectif
qui sont en train de
mettre des quarts
de l'objectif
dans ce format
de structure
de JSON
en plus
de la liste
de ROS
qui doit être
renormalisée.
C'est un peu
d'autres.
Tu as des
nouvelles
des tools
qui sont
avec Prisma
que tu as écrit
et qui
s'y connectent
automatiquement.
Est-ce que
ton language
a une expérience
similaire?
On travaille
sur l'expérience de l'IDE.
C'est
difficile
parce que
la puissance
de l'IDE
doit
être
faite
d'avoir
l'ensemble
de l'HQL
qui est
un super
set
de language
de query
où
tu peux déclare
tes objectifs
mais
parce que
tous ces objectifs
peuvent contacter
l'HQL query
dans lesquels
il y a des
choses
comme
l'autoformat
et un peu plus
difficile.
On a
syntaxe
mais
pour les idées
on travaille
sur
un procès
de
l'implementation
de
le protocole
je vous en souviens
que
maintenant
vous n'avez pas
une string
qui vous aide
avec
l'implementation
dans lesquels
vous êtes
de
l'HQL
mais
si vous
en utilisez
l'HQL
tout le temps
vous êtes
en train
d'avoir
l'objectif
de l'HQL
c'est
un de mes
des
jips
mais
si vous êtes
dans cet objectif
vous pouvez
faire un truc
et aller
avec tout le
objectif
et
toutes ces closses
que je parle
tous les
offsets
ou d'autres
choses comme
ça
je n'ai pas
épris
ceci
mais
dans le
prisma
chaque niveau
il y a
deux
objets
pour le déclare
ou tu as des preuves de prisma.user.findMany ou autre.
Et puis tu passes un objectif par params,
il y a un select ou un inclus,
un clé qui tu mets en,
ainsi que ton limit et les offsets, des choses comme ça.
Donc tu dois mettre en select et puis mettre un autre objectif
pour dire à quel point tu as les propres.
Je ne suis pas sûr de pourquoi ils font ça,
parce que,
en GDB, tu n'es pas capable de nommer un propre,
comme un limit ou des offsets,
parce que ce sont les keywords réserves.
Donc nous nous faisons un petit tour et nous faisons un objet
où tu as des choses qui sont pas les mêmes,
où tu as le tout le même nom,
pour dire à quel point tu as le tout le même nom,
et puis, à l'intérieur, tu as un filtre
et puis tu as un expression filtre.
Mais parce que tu ne peux pas nommer un filtre,
nous nous faisons un petit tour et tout ça.
Et donc, c'est une expérience vraiment belle,
de tenir les niveaux de détail de ton objectif,
de ton objectif par exemple,
correspond à les niveaux de détail dans ta query.
C'est vraiment fascinant.
Et les notes que tu as envoyées à moi,
tu as dit que tu as basiquement
implementé un système de type tout différent
dans le type script.
Qu'est-ce que tu veux dire exactement?
Hum, oui.
C'est...
Ce n'est pas un truc.
En GDB,
c'est le type de type que tu as à l'expecter dans un database.
Donc, c'est un peu plus...
Il y a plus de typescript,
donc tu peux donner,
en 16, en 32, en 64,
par exemple,
des types différents,
des types numériques.
Et puis, il y a un type de type de type de date,
il y a aussi un type de type de duration,
c'est des choses qui ne sont pas
les types correspondants dans le système de typescript.
Je pense qu'il y a peut-être un type de duration
qui est un standard web,
ou peut-être un proposé.
Mais on n'est pas assez là-bas.
Mais oui,
et puis, il y a des types actuels
que tu déclres dans ton schéma.
Il y a des types de blog postage,
ou des types que...
La idée,
en fait,
GDB est assez intéressant
que ça a un basis dans la théorie de la set,
où chaque valeur,
chaque expression de l'expression de l'expect,
que tu peux écrire,
correspond à un set de valeurs.
Et ce set correspond à un type
et à une cardinale.
Et donc,
en fait,
dans le type de type,
tu peux avoir un string,
ou un array de strings.
Dans GDB,
tu as un set de strings,
et il y a un constrain
sur la cardinale.
Donc,
peut-être que ce constrain
contains zéro strings,
qui correspond à,
je pense, un type de array en type,
ou tu peux constater
que tu n'as qu'une string,
qui correspond à
le type de string,
ou tu peux dire que ça contient
un ou plus,
ou un autre,
ou plus d'éléments dans cet état,
qui correspond
à différents types
en type de script.
Si tu as zéro strings,
c'est juste un array de strings.
Si tu as un ou plus,
tu représentes
un tuple,
dans un type de script
où tu as
les braces,
tu as un string
comme l'un des premiers éléments,
et puis tu as un paramètre rest,
comme dot dot dot string,
les braces,
comme l'un des deux éléments.
Et ça,
c'est comme un type de script,
comme tu représentes
un array
qui a un single,
comme un single element,
à la fois,
pas sûr si ça a été traduit
dans un podcast,
parce que c'est,
c'est un peu
un peu plus facile,
et les gens ne utilisent pas ça.
Mais,
oui,
c'est,
donc,
c'est comme un zod
où tu utilises
cet API
pour construire
une structure data
qui représente
quelque chose complexe.
Dans un zod,
c'est un schema,
dans cet état,
c'est comme un query.
Et
chaque expression,
along the way,
toutes les petits pieces
que tu composeras ensemble,
sont des objets
qui forment
cette expression,
comme l'expression d'expression
d'edge QL,
qui consiste
dans deux choses,
qui sont,
ce type,
comme un type underscore underscore,
et un type underscore underscore,
cardinale.
Et nous nous racons
tous ces choses.
Nous racons
ces fonctions
qui sont
puissantes
et qui sont
de la valeur
qui a
la mode appropriée
et qui est modifiée,
et cardinale.
Et,
il y a
beaucoup de
génériques et overloads,
pour sûr.
Je pense qu'il y a
8 ou 9 overloads
juste sur la fonction de sélection,
parce que
il y a un peu de choses
que tu peux sélectionner
dans l'edge QL.
oui, c'est certain que
c'est
le fait que nous commençons
à
générer
ce type de système,
et puis,
faire un peu de logic
qui est
capable de
raconter ces choses
bien,
et,
à la fin de l'année,
convertir tout
un type descriptif
fou et incroyable,
franchement.
C'est la plus
difficile chose que j'ai fait,
et ça me fait
mal à l'air
comme une
toy,
en termes
de complexité d'implementation.
Il y a
beaucoup plus de
trucs
que nous avons
utilisé
pour construire
ce type de
ou,
si tu as
une expression
qui correspond
à
un
état
de
strings,
comme on parle,
ou,
un état
d'arrêt
d'arrêt de strings,
par exemple.
Donc, c'est pas
un état
de
c'est pas
un état
d'arrêt
d'arrêt
d'arrêt de strings.
Si tu as
un état
correspondant
d'arrêt de strings,
tu peux
indexer
et
faire
le
état
de
l'état de
l'état de strings.
Parce que
tu as
l'état d'arrêt
d'arrêt
d'arrêt
d'arrêt,
je suis en train de le dire,
parce que c'est pas
d'arrêt, c'est
d'état d'arrêt
correspondant
à une query
qui correspond
d'arrêt.
Et donc,
on utilise le proxy API
pour
capturer
l'état d'arrêt
d'index
et puis
on
retourne
une version
rapide
d'état
d'état
d'état
d'état
d'état
d'état
d'état
d'état
d'état
d'état d'état
d'état
d'état
d'état
d'état
d'état
d'état d'état d'état d'état
C'est un langage de query, donc il y a des paramètres que vous pouvez passer
dans l'EQL, c'est comme un nom de dollar, ou quelque chose.
Et donc vous pouvez prendre une query et rappeler dans les paramètres E.
Vous specifiez ce que les ingrédients sont, que ce que vous espérez.
Et puis quand vous exécuter cette query, vous avez de passer
le data associé avec ces paramètres et ça s'est bien étendu.
Parce que nous inferons ce type.
Et donc ça commence à ressentir comme vous exécuter votre query,
des fonctions où c'est tout total dry, vous pouvez dire
ce quelles paramètres sont prévenus et puis ça enforceera que le data
que vous passe en correspond à ces types.
Donc je ne sais pas si les gens ont utilisé connex.
J.S. ou quelque chose, c'est probablement le plus close à l'analogue
en termes d'un build-up de query pour une language query.
Ceci est tout SQL-based et ils ont fait leur meilleur en termes
de type inference avec connex.
Mais c'est assez limité dans ce qu'ils peuvent faire,
juste parce qu'ils sont limités par le modèle relationnel
de SQL.
C'est-à-dire que, vous savez, ce que je voulais dire avant,
c'est comment c'est difficile de faire une query SQL
qui rétente ce genre de structure de l'outil JSON,
que nous parlons de.
Les meilleurs queries SQL, elles ne sont qu'une chose
d'être...
Vous allez rejoindre les tables et vous vous endurer avec cette
grande liste de data.
Et beaucoup de cela est rédentant.
Et vous devez faire beaucoup de travail pour le faire
en quelque chose qui ressemble à un user norme.
Et ce n'est pas possible dans tout le dialogue de SQL.
Donc, oui, je veux dire, il n'y a pas de manière
pour qu'on s'en fasse le fait que c'est juste hamstrung
par ce que SQL est.
J.S. Relais à tout ce que vous avez parlé,
comment se sent-il que ça sent un type script throne?
Mais en tout cas, en série,
comment avez-vous fait de bon à écrire ce type de code générique?
Je parle avec beaucoup de gens qui sont comme type script,
mais, comme, quand je suis dans le générique,
ma tête explose.
Donc, comment avez-vous commencé dans ça?
Et vous avez des ressources que vous pouvez pointer
aux gens pour apprendre ce type de code?
Oui, je n'ai pas de genre de throne.
Je pense que si je suis tombé dans un clif
et j'ai fait un petit bruit sur le chemin,
c'est ce que j'ai senti.
Oui, je me souviens...
Pour le sake d'un personne qui se sent ça,
c'était immensement intimidant pour moi.
L'idée d'une forme générique,
juste un petit bruit à deux ans plus tard,
quand je commence à construire Zod,
je n'ai pas de savoir tout.
J'ai regardé l'implementation de IoT-S
et j'ai borne beaucoup de approches
que Julio utilisait dans cette libraire.
J'ai vraiment aimé,
quand j'ai s'estimé,
qu'il y ait un type conditionnel
parce que je n'ai pas de clou.
C'est la partie la plus difficile.
Réguer votre premier genre de générique
et réguer votre premier type de conditionnel.
Ce sont deux concepts
que vous avez à faire avec eux
et que vous devez commencer à écrire un code
et à faire des trucs en jouant avec eux.
Et puis, vous développez l'intuition.
N'importe quoi,
comme c'est utile pour comprendre
ce que c'est,
maintenant, avec le bénéfice de l'inside,
je peux écrire un peu plus d'intuites versions
de comment faire des trucs complexes
et de comment penser.
D'abord, écrire une générique,
un fonction,
puis constater l'input de ça
avec le keyword Extens.
Et ensuite, prendre ce type de renfort
et transformer le code de la fonction
avec un type conditionnel
et des trucs comme ça
et de comment penser.
Ce n'est pas quelque chose
que vous pensez pas
que vous ne l'utilisez pas
comme un développeur de application
et que vous soyez un personne
écrire un boulot
et que vous soyez en train de l'écrire
pour le plus grand.
Mais avoir access à des tools
qui enclament
les choses,
les éligences avec lesquelles vous pouvez écrire,
même les choses
comme la validation formée,
ou quelque chose.
Et,
avoir des trucs à votre disposal,
je vous recommande,
en termes d'avoir
un point de compréhension
pour pouvoir
s'adapter à ce type de renfort,
cette fonctionnalité avancée.
Je ne suis pas sûr de tout,
d'exepté de l'écrire
chaque branche
sur le plan de la route.
Je ne sais pas si je vous recommande.
Or, j'ai fait beaucoup de travail
sur le type script handbook.
Donc, il y a des trucs bons
ou il y a beaucoup de trucs bonnes.
C'est juste une des choses
où je ne sais pas,
tout le monde a appris un peu de différences.
Mais,
il y a beaucoup de trucs que je ne pouvais pas croire
avant de me solver un problème.
Et,
il y a des choses
en hindsight,
des types conditionnels.
C'est comme,
à l'un des deux,
c'est comme,
ceci a l'air super simple.
Et je commence à essayer de l'utiliser.
Je me dis,
qu'est-ce que c'est?
Et puis,
j'ai un détail.
Je me dis,
oui,
et je suis là,
oui, ce n'est pas mal.
Mais,
oui,
c'est pas intoutable.
C'est bizarre que,
ils utilisent les keywords extens,
dans les génériques
et dans les conditionnels.
vous pouvez voir le logic behind,
mais les deux usages
des keywords extens sont très différents.
Et puis,
c'est comme,
quand vous pouvez utiliser inferne,
quand vous ne pouvez pas.
Et,
comment ça fonctionne,
ce qui requiert tout ce autre connaissance de,
comme,
vous savez,
le niveau de spécifique,
vous savez,
spécifique avec lequel type script
infernera type.
Comme,
vous savez,
si vous faites comme,
const x
equals
hello world,
cela se prévient comme un string
ou comme les littéraux,
comme,
les littéraux string littéraux,
hello world.
Et vous devez savoir que,
pour savoir,
comme,
de mentalement,
simuler
comment type script
se réagiront,
comme,
dans tous les situations.
Et c'est,
vous savez,
c'est un grand baguette de rouls.
Et puis,
quand vous vous êtes dans un building
comme ça,
c'est comme un grand baguette
de,
horrifiés,
des trucs que vous devez utiliser
pour impliquer,
vous savez,
pour faire des choses comme,
vous savez,
vous savez,
il y a des scénarios où,
je veux l'outre de l'inferrement
inferner type
pour être clean,
et ne pas être un genre de maitre
de maitres,
de,
différents types généraux.
Et donc,
comme,
j'ai cette,
comme,
utilité de flatten,
c'est basically comme une combinaison
de,
vous savez,
c'est comme un type de maitre,
un couple avec ce genre d'identité type.
Et vous,
comme, vous devez savoir que,
quand vous mettez ces deux choses ensemble,
il y a un type de maitre de type malheur
et ça réduit,
ce qui est le plus minimal de la représentation,
ce qui est le plus magnifique.
Et comme,
quelqu'un a trouvé ça,
comme,
en 2017,
et a posté ça,
comme,
le type de maitre de repo,
c'est vrai.
Et si je n'ai pas trouvé ça,
je n'aurais pas,
pas d'idée de comment faire ça.
Et,
il y a beaucoup d'examples
de,
de cette sorte de malheur,
que,
ce sont des choses que vous n'aurez pas trouvé dans le handbook,
mais,
pourtant,
la plupart des gens,
ne vont jamais avoir à ne pas se inquieter.
Vous savez,
c'est un autre délicieux,
de la rembourser,
comme,
de la rembourser,
cette question de maitre de type objectif,
est tellement obnoxieuse.
Vous pouvez regarder le code Zod,
si vous,
si vous voulez voir,
comment,
comment c'est fait.
Ouais,
Kind de preposterous,
d'hier,
d'hier,
d'hier.
Ouais,
j'ai récemment rencontré
cette identité,
dans un issue de la surface de la surface de la surface de la surface,
et je me suis dit,
wow,
ça a brûlé ma tête,
ça a went from,
comme,
de la surface de la surface de la surface,
c'est comme,
juste,
gobbledy gook,
pour,
oh,
c'est le type que j'ai.
Donc,
ouais,
c'est certain que beaucoup de ces petits trucs se sont emmenés,
en dessous.
Oh,
oui.
Certaines choses vont avoir un petit peu plus beau,
en 4.7.
Ce n'est pas un peu plus facile,
mais vous pouvez maintenant,
faire des clauses,
d'extens,
qui suivent,
des clauses inférieures,
dans un type conditionnel.
Donc, vous vous rendez avec des choses,
qui sont vraiment comme des mots de soupe,
où c'est comme,
vous savez,
T,
d'extens,
d'inférieure,
U,
d'extens,
string,
vous savez,
et donc,
c'est le night,
il y a beaucoup de places où il va s'améliorer la implementation de Zod,
mais,
ouais,
préparez pour,
vous savez,
préparez pour ce chaos,
et un peu de mois,
ou un mois, je pense.
Je veux dire,
c'est un système de type powerfull,
d'un type,
Une des choses que j'ai,
comme,
j'ai toujours,
sort de,
comme,
pensé fond,
sur le type de type string,
c'est comme,
string type,
c'est,
c'est,
A,
non-trivial,
mais B,
comme,
En dessous,
il y a de l'infinité c'est comme un,
les,
des spots sur toute l' tavouette whatever,
Une Estare une estare et toute quelle est-ce que tu veux,
entre,
sf actually.
I don't do use studio tongs,
oh,
they think.
ZigolitWatch skommede Humphair,
c3
cit
des types, des types, des types, vous pouvez dire, vous savez,
Hello, you know, brackets string,
et vous, comme, maintenant, ça doit être
comme, le literal, comme, string hello
suivi des, vous savez,
des séances de digits, ou quelque chose.
Et vous ne pouvez pas, oui,
donc, comme, en termes de représentation,
vous savez, il y a des API où c'est,
vous savez, z.literal,
et puis vous passez, comme, un array
de components qui sont, vous voyez, concatenés,
et vous pourrez mixer
les valeurs littérales,
et, et, comme, z.number,
z.string, je pense que c'est juste z.number.
Je n'ai pas regardé le spectrum
de ce que vous pouvez représenter avec les literaux tempestres,
mais en général, pour ces trucs,
je me suis dit, comme,
juste, vous savez, utilisez z.custom,
qui vous permet de vous,
vous donner des types de signatures que vous voulez, et puis
vous passez un fonction qui utilise un regex
ou quelque chose pour valider
cela bien.
C'est sympa de avoir des réponses, où, vous savez,
chaque issue, je ne dois pas nécessairement
l'adresser immédiatement. Je peux, vous savez,
mettre le travail en place et puis,
acheter un temps pour s'en acheter, en en déclenchant.
C'est cool. Avec cela, on va
ouvrir les outils.
Donc, mon premier et la seule outil d'outil
cette semaine, est
une nouvelle RFC2 React,
qui a été
en train de faire des rounds, beaucoup de discussions
sur Twitter et dans mes compagnies interne.
Mais ce qui est, c'est qu'ils veulent
ajouter un nouveau hook
pour le base-lètre
de hooks et React, appelés Use Event.
Ce hook
a vraiment résolu beaucoup de
issues de dépendance que j'ai trouvé.
Encore que vous commencez à utiliser
des effets pour les choses, vous devez
être très délicieux de
faire sure que vos effets de dépendance
pour ces effets ont tout
sous le sol. Donc, si vous
fais un truc, comme, disons,
un exemple, ils connectent à un socket
d'affect. Si cette connectation
est en train de prendre des choses comme un
username, ou, comme, un peu d'information
qui peut changer,
il faut cela dans l'arrêt de dépendance,
et puis, parce que c'est dans l'arrêt de dépendance
que l'effet va se rerunir
chaque fois que
tout ce truc change. Ce que
l'Use Event appuie, vous
vous le faites, c'est que vous pouvez maintenant
créer ces callbacks qui n'ont pas de
dépendance, mais qui sont toujours
les valeurs de closure des up-to-date
de toutes les variables que vous
réfinissez, et puis quand vous utilisez ces
callbacks à l'intérieur des effets,
il ne faut pas être en train de
être dans l'arrêt de dépendance, et
il fait comme vous le pensez.
Nous avons en fait
ce code base d'Ade script, on l'appelle
l'Use Event Callback, et
il fait le même chose
où il vous permet d'avoir un callback
que l'affect
ne change pas, donc les
effets et autres callbacks
qui le référentent dans l'arrêt de dépendance
ne sont pas d'actualité
d'up-date, donc
c'est un peu difficile de rappeler votre
plan de compétition, mais c'est
vraiment difficile de
faire un code quand il s'y
démarre, parce que la dépendance
s'est démarre.
Donc,
l'Use Event retient une fonction
que vous pouvez passer à
l'onclick ou quelque chose.
Si vous déclarez
l'onclick,
la fonction
est réclare
chaque fois qu'il y a un rérendu,
c'est l'idée?
Oui, avec les compétitions fonctionnelles,
le rérendu est appelé à chaque fois que
il y a un nouveau fonction
chaque fois que le rérendu est réclé.
Et si vous utilisez les trucs hoques
où c'est dans l'arrêt de dépendance,
vous avez un truc qui change
chaque fois.
Et ça se solide par le faire
créer un ref pour la fonction
que vous pouvez utiliser le ref, et le ref
ne ne rigole pas les updates.
C'est très cool.
Oui.
Et si vous n'avez pas de raison pour ce truc,
regardez le solid.
C'est solid.
Oui.
C'est...
Il continue d'être
un problème qui sort
un peu en temps.
C'est un overhead cognitif
d'understand
quand vous avez besoin
de références de cash.
Quand vous n'avez pas besoin
de...
Je me suis trouvé
plus et plus...
C'est plus un peu de faillite que un peu de succès.
C'est comme...
Votre première intuition est
la plus probable de faire le truc le même.
Et puis vous devez travailler
par là pour avoir le droit
de la solution.
Qu'est-ce que vous avez
fait que l'autorise
ajoute toutes vos dépendances pour utiliser l'effet.
A. C'est super bien.
Mais B. C'est
un peu trop trouble que quelque chose
nécessaire pour faire le code.
C'est pas grave.
Oui. Et il y a des
cases rares
où ce n'est pas vraiment ce que vous voulez.
C'est comme...
Oui.
J'ai aimé des hooker quand ils sont venus.
Mais après les problèmes,
je n'ai jamais pensé
que je n'aie pas de réaction
et que vous avez été
éloignés.
Il y a des espèces sur le horizon
du coup.
À la dernière réaction, ils ont
un projet de réaction automatique
qui ressemble
à des bonkers.
Rien à dire.
Rien à dire.
Et puis vous optimisez
la réaction pour moi.
Parce que je suis fier de utiliser
les mémo, les callbacks, les mémo...
Tout.
Parfois, il faut des mémo-chils.
Je me suis dit
que je vais voir ce land dans un décès.
La seule concernant
de ce projet est que nous sommes
en train de faire de plus en plus
de choses à la fin.
De la même manière que les internes
ou peut-être pas idéaux.
Et pour quelqu'un qui ne l'a pas
regardé, c'est pas de la réaction.
C'est incroyable.
C'est...
Je ne sais pas.
Building
quelque chose
qui est interrupter,
est planer,
est...
Toutes ces
toutes ces propres
vraiment amusantes
et qui sont en appui,
qui sont en train de s'assainter,
non-trivile.
Et de l'avant-décembre,
c'est un signe de réaction
que ces sont des problèmes.
Mais
si je ne me sens pas
dans le temps de réaction,
je me souviens que pas plus
des propres compagnies doivent être réveillées.
Et je pense que mes meilleurs stars
peuvent être les plus mauvais.
Donc, mon
tournevis est
cette réactivité
à la bataille de l'esprit.
C'est une réactivité à la bataille.
C'est écrit par Yahu de Katz, qui est le créateur
d'Imbra. Je suis pas sûr.
Donc, c'est une réactivité
à la bataille de l'esprit
de réaction que tu as
essayé
d'excercer
une bataille de réaction
de l'esprit.
Si tu as eu un svelte,
ou si tu as utilisé la bataille,
c'est un concept très con
de toi. La chose intérieure
sur ces batailles est portable
à travers les frameworks.
Donc, ils ont une bataille de réaction
et ils ont des bindings
pour les autres langues.
Oui, je ne sais pas. Il a l'air
assez intéressant.
J'ai mentionné le Xcel
parce que l'exécutif de leur terminologie
fait un espace
de spreadsheet.
Et pour moi, c'est
assez intuant.
Je pense que certains de les
nouveaux batailles de réaction
de réaction de réaction de réaction
sont des
des techniques de mathématiques
qui s'appliquent à la naming.
Ils s'appliquent à des
atomes
pour les émettre
à l'interaction
et tout.
Je pense que c'est un peu plus
confusant.
Je pense que c'est un peu plus
confusant.
Je pense que c'est un peu plus
confusant.
Je n'aime pas le nom.
C'est un bon nom.
C'est un bon nom.
Une autre question qu'on n'a pas
à la checklist, c'est
si Zod est nommé après le général.
Oui,
il est nommé après le character d'Édicit.
Mais la raison réelle est que
j'ai écrit un script pour
mettre sur liste les 3 batailles de la
NPM.
C'est un des les meilleurs que je le prononce.
C'est assez intéressant.
Je suis toujours en zia
ZIA, qui était
l'autre bon nom.
Le symbole de la NM.
Si il y a des listeners de NM
qui ont une bonne idée pour la NPM,
vous pouvez me mettre sur liste.
Le management de la NPM est un
grand spot pour moi.
J'ai landé un des décisions
avec ma company YC
que j'étais très heureuse de choisir
MobX.
Je pense que nous sommes 8 générations
de MobX.
Je n'ai pas d'idée
de faire une vidéo de ZU-STAND
ou Starbeam, ou des choses
plus nouvelles.
C'est un spot très bon pour moi.
C'est difficile pour moi de conceptualiser
quelque chose que j'aimerais mieux que MobX.
C'est juste que
vous vous arrêtez un objet et
vous passez le point à un fonction
pour le réacteur et vous utilisez le tout.
Vous devez utiliser un décorateur
pour les réacteurs,
pour les observer,
qui est un peu de drague.
Ma perception de la trends générale
est de plus en plus
de la state
à la fin de la fin.
Donc,
en utilisant les choses comme le Racky Ollipolo
ou la Racky Racky Racky,
ou les autres choses,
les choses qui sont plus de la state
pour vous, et que vos besoins
sont réduits,
sur le front.
Le réacteur local et
l'éthique de l'éthique de l'éthique
sont de plus en plus longs.
Pour sûr.
Une autre chose que j'ai essayé
de faire, que je pense que c'est
assez drôle, c'est
ce que j'ai parlé, où vous essayez
d'avoir seulement un seul coup de
chaque objet de votre database,
comme localement, d'une normalisation
qui est quelque chose que le client Apollo fait.
À un moment, je pense que je vais avoir
une libraire qui s'appelle Normie,
qu'bruit, donc qu'une
BBB
qui toque
qui sent
tout les normes françaises,
et la tête.
Ce que vous voyez ici le potrzeb de
le automate.
C'est un maximum kroi,
c'est un environnement
kissing on a
s'unné aux
et c'est une
problématique de
sa mission,
unenote.
Donc mon tip de tour, je dois avoir quelques de ces, mais je vais commencer par dire que j'ai recently
acheté cette chère sable, cette chère sable, je ne sais pas si c'est même un terme standard
encore, un peu de choses sur Amazon sont juste appelées ergonomiques, qui tient quelque chose
qui ressemble à ce genre de choses, mais c'est vraiment un changement de jeu, je dois dire,
comme quelqu'un qui a essayé de faire une chère dans le soleil, je me sens comme si c'était
vraiment difficile de s'en aller avec une piste malade, et ça a été beaucoup bon pour moi.
À l'endemain de la journée, je me sens comme si j'ai été engageant mon corps en cour un peu,
et c'est comme si j'étais un bon peu de honte, je suis content que je l'ai utilisé en fait,
en fait, d'être en position pro en ma chère, avec mon corps en cour,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
et c'est comme si j'étais un bon peu de honte, et c'est comme si j'étais un bon peu de honte,
comme si le file est en fait importé de la nourriture.ts, et donc je ne sais pas si c'est un
tournevis ou comme, tu sais, moi juste comme, tu sais, c'est un genre de rule weird ici,
je ne sais pas si les gens vont aimer ou pas, mais je suis kind de content pour tout ça, pour
jouer.
Oui, le point d'extension est odd, comme j'ai écrit quelques projets qui sont type script et esm,
et ajouter js dans mes files type scripts me semble très weird. Et si je commence à avoir
à ajouter mjs, cjs, mts, tout les différents extensions qu'ils ont ajouté sont wild,
comme dotd.cts, comme, un programme junior va trouver ça et juste être comme,
qu'est-ce que, qu'est-ce que c'est?
Je sais, je l'ai finalement dû bâtir le bullet et finalement comprendre cjs versus esm et
comment ça fonctionne avec la résolution de la note et tout pour le travail,
en fait pour le queues, le queues builder, c'est htp et, oh, c'est, c'est, c'est
fun, c'est bien de le savoir maintenant, c'est une nuit, c'est un désastre, j'adore ça.
Ouais, c'est vraiment infortune, ça me rappelle beaucoup de la Python 2.7,
la Python 3 sort de transition et comment ça sort de la paix, c'est un peu différent,
je pense, mais comme, ça va être la paix pour l'écosystème pour beaucoup de ans pour venir,
c'est un peu...
Ouais, ouais, ouais, j'ai réellement, dernière semaine, finalement,
j'ai été le dédié à mon profil bas et j'ai finalement délevé,
j'ai changé ça pour que la Python, sur la ligne de commande, utilise la Python 3,
en fait, la Python 2.7.
Donc, ouais, ça c'est un combat non-compte pour sûr.
Et la dernière toule d'avion de la journée.
Ouais, ma troisième chose est une belle, très simple chose,
j'ai été utilisée par TS Node pour exécuter les files depuis longtemps,
ça sort de la main et la main avec l'ESM, ça, dans un sens,
parce que Dino, maintenant, a une grande expérience où vous pouvez juste
écrire les files.
Et aussi, dans Dino, quand vous faites importe, vous pouvez importe avec l'extension.
C'est un peu intéressant, l'exemple, pour le fait que
Dino est un peu plus commis à être type script,
plus que type script,
où vous n'avez pas besoin de faire cette importe de l'extension.
C'est ce que vous devez faire si vous utilisez le TSC.
Mais, ouais, c'est tout de même,
j'ai utilisé un TSC Node pour exécuter les files depuis longtemps,
et même si vous avez un file en ligne,
qui fait que c'est console.log, hello world,
ça fait 3 ou 4 secondes pour moi.
Et j'ai récemment appris que vous pouvez juste mettre
dash capital T, ou dash dash transpile,
pour juste déterminer le type check.
Donc ça va encore se passer, même si votre code a des erreurs de compilation,
mais ça se passe dans un second sub-second,
qui est juste beaucoup plus bon.
Si vous voulez juste mettre un type script file,
pour faire quelque chose,
ça s'en va, ça fait 3 secondes.
Je ne sais pas même même ce que c'est pour faire,
pourquoi il faut juste prendre 3 secondes
de faire type checking sur un file en ligne,
et que ça se logge.
Donc peut-être que c'est le rume de l'improvement
sur le type script compiler,
mais pour le moment,
tsc Node dash capital T, c'est pour moi.
Le tueil était un bâtel pour vous.
Des billets de l'espoir.
Utilisez l'espoir.
C'est quelque chose que Justin m'a montré,
et j'utilise ça partout,
et c'est super simple.
Vous pouvez juste utiliser ce register de l'espoir,
et vous faites juste Node dash R,
et puis vous êtes au racisme.
Vous savez, j'ai regardé différentes options ici,
et j'ai vu le runner de l'espoir,
ce qui est, ça devrait faire environ la même chose,
et c'est un peu plus prévu pour moi,
c'est un npx esbuild dash runner.
Et je l'ai utilisé presque tout à l'heure.
Il n'y avait vraiment aucune raison
de pourquoi j'ai utilisé le tueil dash,
d'excepter que,
en fin de la journée, c'est presque la même chose,
parce que l'esbuild ne fait pas type checking,
et ils étaient assez similaires pour moi,
en termes de compilation de temps,
sur ce file de console en ligne.
console.log.
Mais clairement, je vais être
l'un des derniers fois
en utilisant tsc Node,
et vous allez être là,
wow, c'est juste embêtant.
Tout le monde est en esbuild.
Oui, le tueil dash r, passant à Node,
c'est juste pour imposer quelque chose.
Donc vous pouvez faire ça pour quelque chose,
vous n'avez pas besoin d'avoir un module global
quand vous êtes en esbuild.
Vous pouvez juste imposer tueil dash r,
et ça va imposer quelque chose.
Vous devez le installer localement
ou vous le installez pour un style npx ?
Vous devez le installer localement.
Localement, cool.
Mais oui, l'esbuild runner,
c'est possible de le faire avec npx
sans le installer globalement.
Et j'ai appris,
j'ai Google-enpx esbuild-runner
en quotes sur Google,
et il n'y a que l'une personne
sur l'internet.
Il y a vraiment un résultat sur Google.
Je ne comprends pas pourquoi
ce n'est pas le go-to
pour les recommandations
sur l'esbuild runner.
Mais ils veulent vraiment
vous installer globalement.
Je ne comprends pas.
Je pense que ce que vous dites,
c'est que vous faites le tueil dash
pour sauver quelques secondes
sur le règle de votre script.
Si vous vous règle quelque chose
sur npx, c'est vraiment...
Vous allez avoir
plus que 3 secondes pour surement
la première fois
de vous faire sortir
juste le moment.
Je ne sais pas si c'est
en fait pour vous
dans le système de file
à la fois,
si vous vous règle à un autre endroit,
est-ce que vous le re-downloadz ?
Peut-être.
Je ne suis pas sûr.
C'est quelque chose
que je vais savoir avant le prochain épisode.
Oui.
En effet.
Ok, je pense que ça
règle ça pour ce week's episode
de DevTools FM.
Merci Colin pour votre commentation.
C'était un bon talk
sur des topics de très complexes
typescript.
Vous êtes probablement
le plus grand typecript
wizard que nous avons eu.
Parce que chaque projet que vous
faites
c'est juste
des trucs de typescript
donc merci pour votre accueil.
Je certainement espère que ça ne
se rend pas plus complexe
ici parce que je ne suis pas sûr
que mon cerveau peut le prendre.
Mais merci beaucoup,
c'était un plaisir.
Merci Colin.
C'était une bonne chose.
C'est tout pour ce week's
episode de DevTools FM.
Faites surement de nous suivre
sur YouTube
et à tout le monde
de votre podcast.
Merci pour l'entraînement.
Sous-titres réalisés par la communauté d'Amara.org
Episode suivant:
Les infos glanées
devtools.fm:DeveloperTools,OpenSource,SoftwareDevelopment
A podcast about developer tools and the people who make them. Join us as we embark on a journey to explore modern developer tooling and interview the people who make it possible. We love talking to the creators front-end frameworks (React, Solid, Svelte, Vue, Angular, etc), JavaScript and TypeScript runtimes (Node, Deno, Bun), Languages (Unison, Elixor, Rust, Zig), web tech (WASM, Web Containers, WebGPU, WebGL), database providers (Turso, Planetscale, Supabase, EdgeDB), and platforms (SST, AWS, Vercel, Netlify, Fly.io).
Tags