microsoft / microsoft/TypeScript
Adding an overload breaks inference of compositional functions
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
Tried fixing this, but ran into another case where an overload breaks type inference:
declare function reverse(a: ReadonlyArray<number>): ReadonlyArray<number>;
declare function incrementEvery(list: ReadonlyArray<number>): ReadonlyArray<number>;
declare function incrementEvery(x: ReadonlySet<number>): ReadonlySet<number>;
declare function compose<T>(
second: (x: ReadonlyArray<number>) => T,
first: (x0: ReadonlyArray<number>) => ReadonlyArray<number>,
): (x0: ReadonlyArray<number>) => T;
const works = compose<ReadonlyArray<number>>(incrementEvery, reverse);
const broke: (nums: ReadonlyArray<number>) => ReadonlyArray<number> = compose(incrementEvery, reverse);
src/a.ts(12,79): error TS2345: Argument of type '{ (list: ReadonlyArray<number>): ReadonlyArray<number>; (x: ReadonlySet<number>): ReadonlySet<num...' is not assignable to parameter of type '(x: ReadonlyArray<number>) => ReadonlySet<number>'.
Type 'ReadonlyArray<number>' is not assignable to type 'ReadonlySet<number>'.
Property 'has' is missing in type 'ReadonlyArray<number>'.
Unlike the above issue, this was broken in all the way back in 2.0.
Originally posted by @andy-ms in https://github.com/microsoft/TypeScript/issues/23352#issuecomment-380844184
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
Comienza con la reproducción mínima en src/a.ts, comparando la llamada a compose inferida con la invocación genérica explícita. Investiga por qué incrementEvery sobrecargada se infiere como el tipo de función incorrecto; se considera terminado cuando la llamada a compose sin anotación se acepta con el tipo de función indicado sin introducir regresiones en los casos de sobrecarga.
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
- 35/100