Narrowing types with private functions with `this` return type fails
@weswigham ya está trabajando en esto.
Desde el 1/7/2021.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Bug Report
I found that a generic type may be evaluated as incompatible while in fact it should be compatible. In my particular case I have a few generic types / classes that have a type argument constrained to MyClass.
I also have a conditional type with a generic argument that is "less" constrained to a union type of MyClass and a different class that has a generic.
// Conditional type with a generic constrained to either MyClass or something else
type ConditionalType<T extends MyClass | string> =
T extends MyClass ? MyGenericType<T> : T;
In the given constellation I get the following error:
Type 'MyClass & T' does not satisfy the constraint 'MyClass'.
Property 'fn' is missing in type 'MyClass & T' but required in type 'MyClass'.(2344)
I found that these prerequisites have to be met to reproduce the error:
- The class (
MyClass) that we constrain the generics arguments to has a function that returns athistype.
Edit: Or no type annotation, no matter what the inferred type is. Other return type annotations, e.g.: stringwork. - This function is either
protectedorprivate.
🔎 Search Terms
this type, generic, conditional types
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about: seems to me that none apply.
⏯ Playground Link
Playground link with relevant code
💻 Code
// The class to constrain to in the generic types
class MyClass {
constructor(public name: string) {}
protected fn(): this {
return this;
}
}
// A generic type with a type argument constrained to MyClass
type MyGenericType<T extends MyClass> = T;
// Conditional type with a generic constrained to either MyClass or something else
type ConditionalType<T extends MyClass | string> =
T extends MyClass ? MyGenericType<T> : T;
🙁 Actual behavior
Although the condition in the mapped type constrains the given type to extend MyClass it is not compatible as the type here evaluates to MyClass & T.
🙂 Expected behavior
I would expect that the condition in the type narrows the type as given in the condition.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
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.
Más de microsoft/TypeScript
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
microsoft/TypeScript#64322 · 2 comentarios · 1 reacción · 2 asignados ·
-
Possible Improvement
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
microsoft/TypeScript#64278 · 1 comentario · 1 reacción ·
-
Docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
microsoft/TypeScript#64118 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
microsoft/TypeScript#64094 ·
-
Docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
microsoft/TypeScript#63959 · 5 comentarios ·
Todos los issues de microsoft/TypeScript
Issues similares
-
optimization optimization:agents-md-curator
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
githubnext/gh-aw-cao#13143 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
blinklabs-io/bursa#904 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
yanet-platform/ipfw-go#129 ·
-
bug confmap/provider/googlesecretmanagerprovider needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
open-telemetry/opentelemetry-collector-contrib#51273 · 2 comentarios ·
-
bug: AI Gateway client filter lists "Unknown" twice when NULL and literal Unknown clients coexist Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100