microsoft / microsoft/TypeScript

Optional fields affecting keyof operator in generic class decorators

Offen
#29,222 4 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: Mapped Types In Discussion Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.2.2

Search Terms:
class decorator keyof typescript

Code

function View<T>(name: string, fields: (keyof T)[]) {
  return (target: new(...args: any[]) => T) => {
    // Do something with fields
  };
}

// works
@View('active', ['street1', 'street2'])
class Address {
  street1: string;
  street2: string;
}

// broken
@View('active', ['street1', 'street2'])
class AddressBroken {
  street1: string;
  street2?: string;
}

Expected behavior:
Both scenarios should work above.

Actual behavior:
It appears that optional fields are causing the decorator to create invalid types.

Argument of type 'typeof AddressBroken' is not assignable to parameter of type 'new (...args: any[]) => { street1: any; street2: any; }'.
  Type 'AddressBroken' is not assignable to type '{ street1: any; street2: any; }'.
    Property 'street2' is optional in type 'AddressBroken' but required in type '{ street1: any; street2: any; }'.
1234

Playground Link:
Playground Sample

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

Beginne mit dem verlinkten Playground-Beispiel und reproduziere den Decorator-Fehler im Zusammenhang mit keyof, generischen Klassen und einem optionalen Feld. Verfolge anschließend, wie der Compiler den Zieltyp des Decorators verarbeitet, und füge einen Regressionstest hinzu, der sowohl Address als auch AddressBroken abdeckt, und verifiziere, dass beide Beispiele ohne den gemeldeten Fehler kompiliert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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