microsoft / microsoft/TypeScript

Make ParameterDecorator and the like generic

Offen
#42,528 2 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie damit, die Definition von ParameterDecorator und die Compiler-Prüfungen für die Anwendung von Parameter-Decorators zu finden. Vergleichen Sie die Zahlen- und String-Beispiele des Issues mit dem aktuellen Verhalten und bestimmen Sie anschließend, wie generische Parametertypen dargestellt und validiert werden sollten. Erledigt ist die Aufgabe, wenn gültige Decorator-Anwendungen akzeptiert und nicht übereinstimmende Parametertypen mit geeigneten Tests abgelehnt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.