microsoft / microsoft/TypeScript

Make ParameterDecorator and the like generic

Ouverte
#42,528 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Awaiting More Feedback Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

lib Update Request

Missing / Incorrect Definition

ParameterDecorator is currently not generic, it can be attachted to any parameter. However, when a decorator is used for e.g. Dependency Injection purposes, some decorators require the type of the parameter to be consistent with the type of the decorator

Sample Code

E.g. we want this to work

class MyController {
  requestThings(@UserId() userId: number): Thing[] { return [] }
}

But this to fail:

class MyController {
  requestThings(@UserId() userId: string): Thing[] { return [] }
}

(as userId will be a number, not a string so the injection should ideally not be possible (at compile time)

Currently UserId is done more or less this way:

const UserId = (): ParameterDecorator => (target, key, index) => { 
  // do stuff
}

while I'd like to add number to ParameterDecorator:

const UserId = (): ParameterDecorator<number> => (target, key, index) => { 
  // do stuff
}

and I'd like typescript to check this when applying a decorator.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par localiser la définition de ParameterDecorator et les vérifications du compilateur pour l’application de décorateurs de paramètres. Comparez les exemples de nombre et de chaîne de caractères de l’issue avec le comportement actuel, puis déterminez comment les types de paramètres génériques doivent être représentés et validés. La tâche est terminée lorsque les applications de décorateurs valides sont acceptées et que les types de paramètres incompatibles sont rejetés avec les tests appropriés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.