microsoft / microsoft/TypeScript

instantiation expression usage leading to an invalid d.ts file generation

Offen
#60,758 4 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@weswigham arbeitet bereits daran.

Seit 13.12.2024.

Bug Domain: Declaration Emit
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

🔎 Search Terms

partial function generic application, function generic variant from another function, instantiation-expressions

🕗 Version & Regression Information
  • This changed between versions 5.6.2 and 5.7.2
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.7.2#code/C4TwDgpgBAyg9gWwgBQE50q0BpCIDOUAvFAEoQCGAJnAHYA2IAgqqhSADxoYRYi4gAfAChQkKE2AcmUCAA9gEWlULlqdRizacArrQDWtOAHdaggDRQAkrIVKVUWjoQAjXsUfO3qQR6YBtKwBdYWF5MDgsKAAzPQBjYABLOigECkTaAQBxHQpUKg5hKChsW0VlQlRKGgYQKH9uTBw8SwA6dvgkRt5mgiDzYUEACiKofTx8AC4SgYBKaY4AFTL7QjgXACsIBOHRgDcKeh0IacW54l8Do+hEwgBRBTYEpctyOMiCyQ5sSwAGCygekMJjMvgA3qMqsAdKhaFAlisKlB1lsdiNisUrsdTgNivMoFibvdHhRnmcyNsPtIpD8oP9LECjKZBL4iODRsUoTC4eMCP5fkEoBkCYdjqMAL7CSWicDQABicDgHjBMUVAEZpvhgKgMgBzSzRRUAJk12r1UElYmgACE8sqoC48hqoFqdbR9Q68iaXWb3RaZeIFXBbagPEGoAAfKAh4TvWhaz2oASEEj+ADkjtQarTlgzXrTgoohDjWrCcgiURLwCF+BDHjSGWyuXyQ0zydmHCDIZEoSAA

💻 Code
type SomePropertyKeys = ReadonlyArray<PropertyKey>
type At<A extends ReadonlyArray<unknown>, I extends number = number> = A[I]

export function mainKeyGuard<
  K extends readonly [PropertyKey, ...SomePropertyKeys],
>(
  keys: K,
): <T extends object>(
  value: T,
) => value is Extract<T, Record<At<K, 0>, unknown>> {
  return <T extends object>(
    value: T,
  ): value is Extract<T, Record<At<K, 0>, unknown>> => {
    return keys[0] in value
  }
}

type Foo = { foo1: string, foo2: string }
type Bar = { bar1: string, bar2: string }
type FooBar = Foo | Bar
const barKeys = ['bar1', 'bar2'] as const
export const isBar = mainKeyGuard(barKeys)<FooBar>
🙁 Actual behavior

Starting with the v5.7.2, the generated d.ts file declares isBar as a function which reference a missing generic type T, so an error is raised

export declare const isBar: (value: FooBar) => value is Extract<T, Record<At<K, 0>, unknown>>;
🙂 Expected behavior

I would expect the isBar function d.ts declaration to not reference a missing generic type T.
Previously, the generated d.ts file behaved like the following

export declare const isBar: (value: FooBar) => value is Bar;
Additional information about the issue

The title mentions "instantiation expression" but I'm not totally sure about how the involved feature is actually named

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.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

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