microsoft / microsoft/TypeScript
type parameter variance in generic call signature is incorrectly bivariant
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
🔎 Search Terms
unsound generic function assignability type parameter variance generic call signature bivariant
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about generics and variance.
⏯ Playground Link
💻 Code
type ShouldBeInvariant<D> = <T>(x: T&D, y: T)=>T&D
const second: ShouldBeInvariant<unknown> = (x, y) => y
const outNumber: ShouldBeInvariant<number> = second
outNumber<unknown>(4, 'str').toExponential()
const inNumber: ShouldBeInvariant<number> = (x) => (x.toExponential(), x)
const inUnknown: ShouldBeInvariant<unknown> = inNumber
inUnknown('str', 'str')
🙁 Actual behavior
The code type checks, while it shouldn't because that is unsound, using ShouldBeInvariant covariantly or contravariantly both causes runtime errors.
🙂 Expected behavior
ShouldBeInvariant should be invariant against its parameter. Both assigns:
const outNumber: ShouldBeInvariant<number> = second
and
const inUnknown: ShouldBeInvariant<unknown> = inNumber
should report errors
Additional information about the issue
No response
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 el ejemplo vinculado de TypeScript Playground y reproduce las asignaciones no seguras que involucran ShouldBeInvariant. Rastrea la asignabilidad de las firmas de llamada genéricas y la comprobación de varianza; después, añade una prueba de regresión que muestre que ambas asignaciones producen errores y que las llamadas inválidas ya no pasan la comprobación de tipos.
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
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100