microsoft / microsoft/TypeScript
Differing user-defined type guard and 'typeof' type guard behaviour when narrowing 'any'
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
In the below code, using a typeof type guard and an equivalent (I thought) user-defined guard, only one error is produced.
var y: any;
// Built-in type guard
if (typeof y === "string") {
y.hello = true; // Correct error - 'hello' does not exist on type string
}
// Equivalent user-defined type guard
function f(x: any): x is string {
return typeof x === "string";
}
if (f(y)) {
y.hello = true; // No error with user-defined guard
}
Playground demo. Looks like user-defined type guards won't narrow from any, in any circumstances, as far as I can tell.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par l’exemple TypeScript Playground dans l’issue et reproduisez les diagnostics différents pour les gardes intégrés et définis par l’utilisateur. Suivez le comportement de narrowing du compilateur pour une valeur any et vérifiez que le garde défini par l’utilisateur produit la même erreur pour y.hello que le garde typeof.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 35/100