microsoft / microsoft/TypeScript
`asserts` keyword does not enhance hoisted function type, works on functions assigned to a variable
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
TypeScript Version: 4.0.2, 4.1.0-beta
Search Terms:
asserts function
Code
interface LabelledFunction { label: string; }
function assignLabel(fn: () => unknown, label: string): asserts fn is LabelledFunction {
Object.assign(fn, { label });
}
function a() { }
assignLabel(a, 'a');
console.info(a.label); // Property 'label' does not exist on type '() => void'.(2339)
const b = function () { };
assignLabel(b, 'b');
console.info(b.label); // works as expected
const c = () => { };
assignLabel(c, 'c');
console.info(c.label); // works as expected
Expected behavior:
At least in runtime code coming after assignLabel(a, 'a');, a.label should be accessible.
Actual behavior:
Property 'label' does not exist on type '() => void'.(2339)
Playground Link: link
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 la reproduction liée dans TypeScript Playground et comparez la fonction hoisted a avec les fonctions assignées à des variables b et c après l'appel de assignLabel. Suivez le comportement du vérificateur de types pour les fonctions d'assertion et confirmez la finalisation lorsque a.label est accepté dans le code suivant l'appel, sans régression des cas qui fonctionnent.
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é
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100