Maison interface Web js tutoriel Confusion sur l'inférence de type dactylographié: Pourquoi les définitions des types de valeur de retour des quatre fonctions sont-elles les mêmes et comment éviter les erreurs de type dans le scénario de type Union?

Confusion sur l'inférence de type dactylographié: Pourquoi les définitions des types de valeur de retour des quatre fonctions sont-elles les mêmes et comment éviter les erreurs de type dans le scénario de type Union?

Apr 04, 2025 pm 03:06 PM
typescript 解决方法

Explorez profondément les subtilités de l'inférence de type dactylographié: l'équivalence de la définition du type de valeur de retour des quatre fonctions et la sécurité du type sous le type Union

Cet article analyse profondément le mécanisme d'inférence du type de typeScript, explique comment les définitions de type de fonction apparemment différentes peuvent obtenir le même résultat et résout les erreurs de type dans le scénario de type conjoint.

Tout d'abord, nous observons quatre types de définitions getReturnType :

 Tapez getreTurnType1<t> = T s'étend (... args: jamais) => inférer r? R: Jamais;
Tapez getreTurnType2<t> = T s'étend (... args: jamais []) => inférer r? R: Jamais;
Tapez getreTurnType3<t> = T s'étend (... args: tout []) => inférieur r? R: Jamais;
Tapez getreTurnType4<t> = T s'étend (... args: tout) => inférieur r? R: Jamais;</t></t></t></t>
Copier après la connexion

Les quatre définitions de type sont conçues pour extraire le type de valeur de retour à partir du type de fonction. Bien que les types de paramètres ( never , never[] , any[] , any ) soient différents, ils n'ont aucun effet sur le résultat de l'inférence du type R de retour dans le type d'inférence. Le mot clé extends se concentre sur la structure des types de fonctions, et non sur les types spécifiques de paramètres. Tant que le type de fonction correspond, infer R peut déduire correctement le type de valeur de retour. Par conséquent, ces quatre définitions sont en fait équivalentes.

Ensuite, nous analysons un morceau de code qui montre les erreurs de type qui peuvent se produire lorsque le type d'union et le type conditionnel sont combinés:

 Type d'accessoires<t extends major rescategorylabel> = {
  Étiquettes: t [];
  SetSelect: (Index: numéro, étiquette: t étend majeur? Major: RescategoryLabel) => void;
  xxx: tout; // D'autres attributs sont omis};

const changeselect = (
  Index: numéro,
  Étiquette: Major | RescategoryLabel,
  E: react.Mousevent<htmlanchorelement> | React.touchevent<htmlanchorelement>
) => {
  setSelect (index, label);
  activeTaBtocentter (e.CurrentTarget comme htmlement);
};</htmlanchorelement></htmlanchorelement></t>
Copier après la connexion

Il y a un problème avec l'inférence de type de l' label paramètre de fonction setSelect dans la définition de type Props . Le type conditionnel T extends Major ? Major : ResCategoryLabel tente de déterminer le type d' label en fonction du type de T Cependant, puisque T est un type conjoint de Major | ResCategoryLabel , lorsque le type réel de T est inconnu, le compilateur ne peut pas déterminer si T est Major ou ResCategoryLabel , ce qui entraîne l'échec de label . Le problème n'est pas le type conditionnel lui-même, mais son application dans le contexte du type d'union.

La solution consiste à utiliser Major | ResCategoryLabel directement comme type d' label :

 Type d'accessoires<t extends major rescategorylabel> = {
  Étiquettes: t [];
  SetSelect: (Index: numéro, étiquette: Major | RescategoryLabel) => void;
  xxx: tout; // D'autres attributs sont omis};</t>
Copier après la connexion

De cette façon, les types de paramètres de setSelect sont clairs, évitant les erreurs de type et améliorant la lisibilité et la maintenabilité du code. Cela reflète la nécessité d'abandonner le contrôle de type raffiné apporté par des types conditionnels lorsqu'il s'agit de types de joints en échange de définitions de type plus claire et plus sûres.

Confusion sur l'inférence de type dactylographié: Pourquoi les définitions des types de valeur de retour des quatre fonctions sont-elles les mêmes et comment éviter les erreurs de type dans le scénario de type Union?

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 de ce site Web
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

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

<🎜>: Dead Rails - Comment apprivoiser les loups
3 Il y a quelques semaines By DDD
Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
2 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1655
14
Tutoriel PHP
1253
29
Tutoriel C#
1227
24
Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Apr 19, 2025 pm 04:51 PM

Dépannage et solutions au logiciel de sécurité de l'entreprise qui fait que certaines applications ne fonctionnent pas correctement. De nombreuses entreprises déploieront des logiciels de sécurité afin d'assurer la sécurité des réseaux internes. ...

La solution de Navicat à la base de données ne peut pas être connectée La solution de Navicat à la base de données ne peut pas être connectée Apr 08, 2025 pm 11:12 PM

Les étapes suivantes peuvent être utilisées pour résoudre le problème que Navicat ne peut pas se connecter à la base de données: vérifiez la connexion du serveur, assurez-vous que le serveur s'exécute correctement, l'adresse et le port et le pare-feu autorise les connexions. Vérifiez les informations de connexion et confirmez que le nom d'utilisateur, le mot de passe et les autorisations sont corrects. Vérifiez les connexions réseau et dépannez les problèmes de réseau tels que les défaillances du routeur ou du pare-feu. Désactiver les connexions SSL, qui peuvent ne pas être prises en charge par certains serveurs. Vérifiez la version de la base de données pour vous assurer que la version NAVICAT est compatible avec la base de données cible. Ajustez le délai d'expiration de la connexion et pour les connexions distantes ou plus lentes, augmentez le délai d'expiration de la connexion. D'autres solutions de contournement, si les étapes ci-dessus ne fonctionnent pas, vous pouvez essayer de redémarrer le logiciel, à l'aide d'un pilote de connexion différent ou de consulter l'administrateur de la base de données ou l'assistance officielle NAVICAT.

Que faire si l'utilisation de la mémoire redis est trop élevée? Que faire si l'utilisation de la mémoire redis est trop élevée? Apr 10, 2025 pm 02:21 PM

Redis Memory Soaring comprend: un volume de données trop important, une mauvaise sélection de structure de données, des problèmes de configuration (tels que les paramètres maxmemory trop petits) et des fuites de mémoire. Les solutions incluent: la suppression des données expirées, utiliser la technologie de compression, sélectionner les structures appropriées, ajuster les paramètres de configuration, vérifier les fuites de mémoire dans le code et surveiller régulièrement l'utilisation de la mémoire.

Problèmes d'autorisations d'installation de Centos Minio Problèmes d'autorisations d'installation de Centos Minio Apr 14, 2025 pm 02:00 PM

Problèmes d'autorisations et solutions pour l'installation de Minio dans le système CentOS lors du déploiement de Minio dans l'environnement CentOS, les problèmes d'autorisation sont des problèmes courants. Cet article présentera plusieurs problèmes d'autorisation courants et leurs solutions pour vous aider à terminer l'installation et la configuration de Minio en douceur. Modifiez le compte et le mot de passe par défaut: vous pouvez modifier le nom d'utilisateur et le mot de passe par défaut en définissant les variables d'environnement MINIO_ROOT_USER et MINIO_ROOT_PASSWORD. Après modification, le redémarrage du service Minio prendra effet. Configurer les autorisations d'accès au seau: la définition du seau en public entraînera une traction vers le répertoire, ce qui représente un risque de sécurité. Il est recommandé de personnaliser la stratégie d'accès au seau. Vous pouvez utiliser Minio

Quels sont les malentendus communs dans la configuration CentOS HDFS? Quels sont les malentendus communs dans la configuration CentOS HDFS? Apr 14, 2025 pm 07:12 PM

Problèmes et solutions courants pour la configuration du système de fichiers distribué HADOOP (HDFS) sous CentOS lors de la création d'un cluster HADOOPHDFS sur CentOS, certains erreurs de configurations courantes peuvent entraîner une dégradation des performances, une perte de données et même le cluster ne peut pas démarrer. Cet article résume ces problèmes courants et leurs solutions pour vous aider à éviter ces pièges et à assurer la stabilité et le fonctionnement efficace de votre cluster HDFS. Erreur de configuration du rack-Aware: Problème: les informations de rack-Aware ne sont pas configurées correctement, ce qui entraîne une distribution inégale des répliques de blocs de données et l'augmentation de la charge du réseau. SOLUTION: Vérifiez la configuration du rack-Aware dans le fichier hdfs-site.xml et utilisez HDFSDFSADMIN-PRINTTOPO

Peut-on exécuter le code sous Windows 8 Peut-on exécuter le code sous Windows 8 Apr 15, 2025 pm 07:24 PM

VS Code peut fonctionner sur Windows 8, mais l'expérience peut ne pas être excellente. Assurez-vous d'abord que le système a été mis à jour sur le dernier correctif, puis téléchargez le package d'installation VS Code qui correspond à l'architecture du système et l'installez comme invité. Après l'installation, sachez que certaines extensions peuvent être incompatibles avec Windows 8 et doivent rechercher des extensions alternatives ou utiliser de nouveaux systèmes Windows dans une machine virtuelle. Installez les extensions nécessaires pour vérifier si elles fonctionnent correctement. Bien que le code VS soit possible sur Windows 8, il est recommandé de passer à un système Windows plus récent pour une meilleure expérience de développement et une meilleure sécurité.

Comment créer une base de données MySQL à l'aide de phpmyadmin Comment créer une base de données MySQL à l'aide de phpmyadmin Apr 10, 2025 pm 10:48 PM

PHPMyAdmin peut être utilisé pour créer des bases de données dans des projets PHP. Les étapes spécifiques sont les suivantes: Connectez-vous à PhpMyAdmin et cliquez sur le bouton "Nouveau". Entrez le nom de la base de données que vous souhaitez créer et notez qu'il est conforme aux règles de dénomination MySQL. Définissez des ensembles de caractères, tels que UTF-8, pour éviter les problèmes brouillés.

Comment gérer la fragmentation de la mémoire redis? Comment gérer la fragmentation de la mémoire redis? Apr 10, 2025 pm 02:24 PM

La fragmentation de la mémoire redis fait référence à l'existence de petites zones libres dans la mémoire allouée qui ne peut pas être réaffectée. Les stratégies d'adaptation comprennent: Redémarrer Redis: effacer complètement la mémoire, mais le service d'interruption. Optimiser les structures de données: utilisez une structure plus adaptée à Redis pour réduire le nombre d'allocations et de versions de mémoire. Ajustez les paramètres de configuration: utilisez la stratégie pour éliminer les paires de valeurs clés les moins récemment utilisées. Utilisez le mécanisme de persistance: sauvegardez régulièrement les données et redémarrez Redis pour nettoyer les fragments. Surveillez l'utilisation de la mémoire: découvrez les problèmes en temps opportun et prenez des mesures.

See all articles