microsoft / microsoft/TypeScript
Property '[Symbol.iterator]' is missing in type 'PartialTuple<ConstructorParams<T>>
Dieses Issue hat noch niemand übernommen.
- 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;
}
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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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