recherche
Maisoninterface Webjs tutorielAu-delà de la sécurité des types : rendre TypeScript plus intelligent en créant un sélecteur d'exécution

Beyond Type Safety: making TypeScript smarter by Building a Runtime Picker

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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Java vs Javascript: une comparaison détaillée pour les développeursJava vs Javascript: une comparaison détaillée pour les développeursMay 16, 2025 am 12:01 AM

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

Types de données JavaScript: Y a-t-il une différence entre le navigateur et les nodejs?Types de données JavaScript: Y a-t-il une différence entre le navigateur et les nodejs?May 14, 2025 am 12:15 AM

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.

Commentaires JavaScript: un guide pour utiliser // et / * * /Commentaires JavaScript: un guide pour utiliser // et / * * /May 13, 2025 pm 03:49 PM

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

Python vs JavaScript: une analyse comparative pour les développeursPython vs JavaScript: une analyse comparative pour les développeursMay 09, 2025 am 12:22 AM

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.

Python vs JavaScript: Choisir le bon outil pour le travailPython vs JavaScript: Choisir le bon outil pour le travailMay 08, 2025 am 12:10 AM

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: comprendre les forces de chacunPython et Javascript: comprendre les forces de chacunMay 06, 2025 am 12:15 AM

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.

Core de JavaScript: est-il construit sur C ou C?Core de JavaScript: est-il construit sur C ou C?May 05, 2025 am 12:07 AM

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

Applications JavaScript: de front-end à back-endApplications JavaScript: de front-end à back-endMay 04, 2025 am 12:12 AM

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.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Navigateur d'examen sécurisé

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

Version Mac de WebStorm

Outils de développement JavaScript utiles

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

MantisBT

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.