microsoft / microsoft/TypeScript
Unable to resolve generic type when using an overloaded function as parameter
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
Bug Report
🔎 Search Terms
overload parameter function
🕗 Version & Regression Information
Using the playground, the code works when I choose version 3.3.3. After that version, the problem comes up.
💻 Code
type SpecialType<T> = () => void & { value: T };
function specialFunction<T>(): SpecialType<T>;
function specialFunction<T>(source: Record<string, T>): Record<string, T>;
function specialFunction<T>(source?: Record<string, T>): SpecialType<T> | Record<string, T> {
return source as any;
}
const otherFunction = <K extends keyof T, T>(source: Record<string, T>, property: K): Record<string, T[K]> => ({ source, property }) as any;
const obj: Record<string, { label: string }> = { value: { label: 'hello world' } };
const defined = specialFunction(obj);
const working = otherFunction(defined, 'label');
const nonworking = otherFunction(specialFunction(obj), 'label');
const alsoworking = otherFunction(specialFunction<{ label: string }>(obj), 'label');
🙁 Actual behavior
The non-inlined call chain works and label is recognized as a property name. The inlined call as a parameter states, that the second parameter type is never(instead of keyof T).
🙂 Expected behavior
No different type resolution regardless of the call type.
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.
Línea de trabajo
Reproduce el ejemplo en el TypeScript playground usando la versión 3.3.3 y una versión posterior; después, compara el tipo inferido del segundo argumento en las dos llamadas. Se considera terminado cuando la llamada inline acepta 'label' de forma coherente con la llamada no inline, sin requerir el argumento de tipo genérico explícito.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 30/100