


Avis de non-responsabilité
Hé, avant de commencer, permettez-moi de clarifier quelque chose : même si je parlerai beaucoup de mon package, ts-runtime-picker, ce n'est pas un article promotionnel. Je partage simplement mon expérience et le parcours que j’ai parcouru avant de le construire. (Mais bon, si vous êtes curieux, voici le lien vers le package ?).
Comment TypeScript m'a conduit à une nouvelle idée (et un package)
Remontons un peu en arrière. Je travaille donc avec TypeScript depuis un moment maintenant. Je ne me qualifierais pas de pro de TypeScript, mais j'ai construit quelques grands projets et travaillé avec dans mon entreprise. Vous savez, les projets habituels : des projets « hello world », d'autres un peu plus complexes, et bien sûr, une bonne part de voyages sur Google pour comprendre « qu'est-ce que cette erreur signifie ? » ou "Comment puis-je sélectionner à nouveau des champs dans une interface ?" (Vous comprenez. ?)
Un jour, j'ai rencontré un problème alors que je travaillais avec les fonctions cloud de Firebase. J'étais sur le point de terminaison createUser, écrivant ma logique de validation, coupant les données et gérant la folie habituelle des requêtes CRUD. Tout se déroulait bien jusqu'à ce que je tombe sur ce morceau de code d'un ancien développeur :
firebase.collection("users").add(request.data.user);
... et mon pro TypeScript intérieur criait. ?
Je veux dire, allez, c'était un énorme signal d'alarme. Droite? Insérer directement des données utilisateur non filtrées de cette manière était risqué : que se passerait-il si les données de la demande manquaient d'une certaine validation et que nous finissions par insérer des champs indésirables dans la base de données ? Pas génial.
J'ai rapidement supprimé le code, mais ensuite, je me suis figé pendant une seconde. ? J'ai regardé mon écran en pensant : « Attendez, si j'attribue simplement request.data au type d'interface utilisateur, TypeScript ne m'empêcherait-il pas de faire quelque chose comme ça ? Cela ne devrait-il pas résoudre le problème ? (Jetez un coup d'œil plein d'espoir à mon IDE, en attendant que les lignes rouges ondulées apparaissent.)
Mais attendez… ?♂️ TypeScript n'est pas magique. C'est seulement une vérification au moment de la compilation, n'est-ce pas ? Il n’existe pas au moment de l’exécution. TypeScript est un masque pour la sécurité des types, mais il n'applique rien lors de l'exécution du code. Cela n'empêche pas vraiment l'insertion de champs supplémentaires au moment de l'exécution.
Alors, j'ai appelé un de mes coéquipiers et lui ai demandé : « Hé mon frère, si nous avons un objet nommé alphabets avec toutes les lettres de l'alphabet, et que nous créons une interface OnlyTwoLetters qui n'autorise que les lettres « a » et « b', que se passe-t-il lorsque nous transférons l'objet alphabets vers cette interface ? »
// Object with all alphabet letters const alphabets = { a: 'Apple', b: 'Banana', c: 'Cherry', d: 'Date', e: 'Eggplant', f: 'Fig', // ... all the way to z }; // Interface that only allows 'a' and 'b' interface OnlyTwoLetters { a: string; b: string; } // Casting alphabets to OnlyTwoLetters const filteredAlphabets = alphabets as OnlyTwoLetters; console.log(filteredAlphabets);
Sans perdre un instant, mon coéquipier a dit : « Haha, eh bien, vous obtiendrez toujours toutes les lettres de l'alphabet car TypeScript ne peut pas vraiment arrêter cela lors de l'exécution. »
Merde. Je le savais. J'étais sous l'effet de l'espoir -espérant que TypeScript pourrait comme par magie m'empêcher de faire des erreurs au moment de l'exécution. ?
Mais ensuite, ça m'a frappé : et si TypeScript pouvait appliquer cela au moment de l'exécution ? Et si nous pouvions convertir un objet en une interface spécifique et demander à TypeScript de supprimer automatiquement toutes les propriétés qui n'étaient pas définies dans l'interface ?
Cela résoudrait mon problème.
La naissance de ts-runtime-picker
Alors, avec ce moment d’ampoule, j’ai pensé : « Pourquoi ne pas en faire une réalité ? » Si je pouvais diffuser request.data sur l'interface utilisateur, TypeScript pourrait m'aider automatiquement à supprimer toutes les propriétés supplémentaires, rendant ainsi l'insertion de l'objet en toute sécurité dans Firebase. ?
Et juste comme ça, l'idée de ts-runtime-picker est née. L'objectif était simple : créer un package qui permettrait aux utilisateurs de TypeScript de filtrer les propriétés indésirables d'un objet, en fonction des champs définis dans une interface spécifique.
La meilleure partie ? Cela m'éviterait la validation manuelle et le filtrage des champs. Fini le temps de :
firebase.collection("users").add(request.data.user);
Comment ça marche : laissez TypeScript faire son travail
Avec ts-runtime-picker, l'ensemble du processus est automatisé. Vous pouvez convertir un objet en interface et le package garantira que seules les propriétés définies dans l'interface sont conservées. Voici comment cela fonctionne en action :
Avant : Validation manuelle
// Object with all alphabet letters const alphabets = { a: 'Apple', b: 'Banana', c: 'Cherry', d: 'Date', e: 'Eggplant', f: 'Fig', // ... all the way to z }; // Interface that only allows 'a' and 'b' interface OnlyTwoLetters { a: string; b: string; } // Casting alphabets to OnlyTwoLetters const filteredAlphabets = alphabets as OnlyTwoLetters; console.log(filteredAlphabets);
Après : Avec ts-runtime-picker
const filteredData = { name: requestData.name, age: requestData.age, }; firebase.collection("users").add(filteredData); // More work, less fun.
La meilleure partie ? Ce code est sûr par défaut. Pas besoin de vérifications manuelles ou de manipulation d’objets. ts-runtime-picker le gère automatiquement pour vous en filtrant tous les champs qui n'existent pas dans l'interface utilisateur. Vous pouvez simplement vous concentrer sur votre logique de base sans vous soucier de l'insertion accidentelle de champs. ?
Le pouvoir de la paresse (et comment cela peut conduire à l'innovation)
Alors, vous vous demandez peut-être : "Est-ce que cela est venu par pure paresse ?" Et à cela, je dis : Oui, mais aussi, non. ?
Bien sûr, l’idée initiale est venue de ma paresse : je ne voulais pas filtrer manuellement les champs à chaque fois que j’avais besoin d’insérer des données. Mais bon, parfois la paresse mène au génie ! Le désir de rendre les choses plus faciles peut être un moteur d'innovation.
En fait, malgré la « paresse » initiale, j'ai passé 8 heures à construire le package. Ouais, c'est vrai. ?
Mais c’est comme ça que ça se passe parfois. "Le besoin donne naissance à l'invention", et ce besoin d'éviter des contrôles fastidieux et répétitifs a conduit à une nouvelle solution qui a finalement rendu ma vie (et, je l'espère, celle de beaucoup d'autres) beaucoup plus facile.
Ainsi, même si je peux accuser la paresse d'avoir lancé le bal, c'est la nécessité de résoudre le problème qui a donné naissance à ts-runtime-picker. Et c’est ainsi que parfois, être coincé ou paresseux n’est pas nécessairement une mauvaise chose : c’est le berceau de quelque chose de nouveau et d’utile !
Conclusion
Et c'est l'histoire derrière le package ts-runtime-picker. Un voyage de la frustration de TypeScript à la création d'un outil qui résout un problème réel. Ce package est ma façon d'aider les utilisateurs de TypeScript à tirer pleinement parti de la sécurité des types, non seulement pendant le développement mais également lors de l'exécution.
Si vous en avez assez de filtrer manuellement les champs ou si vous craignez que des données indésirables ne s'infiltrent, essayez ts-runtime-picker. C'est une chose de moins à craindre, et cela rend le travail avec TypeScript un peu plus intelligent. ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

JavaandjavascriptAredistinctLanguages: JavaisUsedFormenterpriseAndMobileApps, tandis que javascriptisforinteractivewebpages.1) javais compilé, statistiquement type, Andrunsonjvm.2)

Les types de données de base JavaScript sont cohérents dans les navigateurs et Node.js, mais sont gérés différemment des types supplémentaires. 1) L'objet global est la fenêtre du navigateur et global dans Node.js. 2) Objet tampon unique de Node.js, utilisé pour traiter les données binaires. 3) Il existe également des différences dans les performances et le traitement du temps, et le code doit être ajusté en fonction de l'environnement.

JavascriptUsestwotypesofComments: unique (//) et multi-ligne (//). 1) use // forquicknotesorsings-lineexplanations.2) use // forlongErexPlanationsorcommentingoutblocksofcode.commentsShouldExplatethe'why ', notthewat', et bplacedabovovereLantCodeForCaReric

La principale différence entre Python et JavaScript est le système de type et les scénarios d'application. 1. Python utilise des types dynamiques, adaptés à l'informatique scientifique et à l'analyse des données. 2. JavaScript adopte des types faibles et est largement utilisé pour le développement frontal et complet. Les deux ont leurs propres avantages dans la programmation asynchrone et l'optimisation des performances, et doivent être décidées en fonction des exigences du projet lors du choix.

Que ce soit pour choisir Python ou JavaScript dépend du type de projet: 1) Choisissez Python pour les tâches de science et d'automatisation des données; 2) Choisissez JavaScript pour le développement frontal et complet. Python est favorisé pour sa bibliothèque puissante dans le traitement et l'automatisation des données, tandis que JavaScript est indispensable pour ses avantages dans l'interaction Web et le développement complet.

Python et JavaScript ont chacun leurs propres avantages, et le choix dépend des besoins du projet et des préférences personnelles. 1. Python est facile à apprendre, avec une syntaxe concise, adaptée à la science des données et au développement back-end, mais a une vitesse d'exécution lente. 2. JavaScript est partout dans le développement frontal et possède de fortes capacités de programmation asynchrones. Node.js le rend adapté au développement complet, mais la syntaxe peut être complexe et sujet aux erreurs.

Javascriptisnotbuiltoncorc; il est en interprétéLanguageThatrunSoninesoftenwritteninc .1) javascriptwasdesignedasalightweight, interprété de LanguageForwebbrowsers.2) EnginesevolvedFromSimpleInterpreterstoJitCompilers, typicalinc, impropringperformance.

JavaScript peut être utilisé pour le développement frontal et back-end. L'endouage frontal améliore l'expérience utilisateur via les opérations DOM, et le back-end gère les tâches du serveur via Node.js. 1. Exemple frontal: modifiez le contenu du texte de la page Web. 2. Exemple backend: Créez un serveur Node.js.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Version Mac de WebStorm
Outils de développement JavaScript utiles

Dreamweaver CS6
Outils de développement Web visuel

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.
