microsoft / microsoft/TypeScript
instantiation expression usage leading to an invalid d.ts file generation
Abierto
@weswigham ya está trabajando en esto.
Desde el 13/12/2024.
Bug
Domain: Declaration Emit
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
🔎 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
💻 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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Evaluación
Este issue todavía no se ha evaluado.