microsoft / microsoft/TypeScript
Parameters<T> and ReturnType<T> limitation
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
TypeScript Version: 3.9.2
Search Terms:
Generic Method Extend Parameters ReturnType
Code
export class Test {
myMethod(): string {
return "42";
}
myMethod2(a: string): string {
return "42" + a;
}
// Works ---
override<M extends keyof this>(method: M, newFunc: this[M]) {
}
// Works ---
override2<M extends keyof this>(method: M, newFunc: (...args: Parameters<this["myMethod2"]>) => ReturnType<this["myMethod2"]>) {
}
// Fails ---
override3<M extends keyof this>(method: M, newFunc: (...args: Parameters<this[M]>) => ReturnType<this[M]>) {
}
}
const test = new Test();
test.override("myMethod2", a => "xxx");
test.override2("myMethod2", a => "xxx");
test.override3("myMethod2", a => "xxx");
Expected behavior:
I would expect override3 to compile and be equivalent to override + override2 (when M == "myMethod2")
Actual behavior:
override3 causes syntax error:
Type 'this[M]' does not satisfy the constraint '(...args: any) => any'.
Type 'this[keyof this]' is not assignable to type '(...args: any) => any'.
Type 'this[string] | this[number] | this[symbol]' is not assignable to type '(...args: any) => any'.
Type 'this[string]' is not assignable to type '(...args: any) => any'.
Related Issues:
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 vinculada en TypeScript Playground e inspecciona cómo el compilador gestiona Parameters y ReturnType cuando T es el genérico indexado this[M]. El issue estará terminado cuando el ejemplo override3 compile con la inferencia esperada para myMethod2 y el comportamiento esté cubierto por una prueba adecuada del compilador.
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
- 25/100