microsoft / microsoft/TypeScript

Property '[Symbol.iterator]' is missing in type 'PartialTuple<ConstructorParams<T>>

Offen
#36,012 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

TypeScript Version: 3.1 -> 3.7

Search Terms:
tuple, mapped tuple

Code

type Constructor = new (...args: any[]) => any;
type ConstructorParams<T extends Constructor> = T extends new (...args: infer P) => any ? P : never;
type PartialTuple<T extends any[]> = {[I in keyof T]: T[I] | undefined}
type ConstructorReturnType<T extends Constructor> =
    T extends new (...args: any[]) => infer R ? R : never;

function getClassFactory<T extends Constructor>(type: T) {
    type OptionalParams = PartialTuple<ConstructorParams<T>>;
    return getFunctionWithOptionalTypes<OptionalParams, ConstructorReturnType<T>>();
}

Expected behavior:
should compile correctly

Actual behavior:
shows error:

Type 'PartialTuple<ConstructorParams>' does not satisfy the constraint 'any[]'.
Property '[Symbol.iterator]' is missing in type 'PartialTuple<ConstructorParams>'.

Playground Link:
playground

I have to use 2 functions as I get A rest parameter must be of an array type. if I try to do it one function:

function getClassFactory<T extends Constructor>(type: T): new (...args: PartialTuple<ConstructorParams<T>>) => ConstructorReturnType<T> {
    return {} as any;
}

playground

I am trying to create a type that returns a function with parameters equal to that of a class constructor but where each parameter is T[P] | undefined.
I've done similar to this before

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 damit, den Fehler in den beiden verlinkten TypeScript Playgrounds über die angegebenen TypeScript-Versionen hinweg zu reproduzieren, wobei du dich auf die Beispiele mit dem gemappten Tupel und den Konstruktorparametern konzentrierst. Verfolge die Verarbeitung der PartialTuple-Einschränkung und die Validierung von Restparametern durch den Compiler. Als abgeschlossen gilt die Aufgabe, wenn beide Beispiele ohne die gemeldeten Fehler '[Symbol.iterator]' oder Array-Typen 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.