microsoft / microsoft/TypeScript

Subclass of a (non-abstract class that uses declaration merging to implement parent abstract member) also has to implement same abstract member

Abierto
#57,263 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: classes Help Wanted
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

🔎 Search Terms

subclass inherit abstract concrete method property member complains parent declaration merge merging satisfy implement

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed all the FAQ entries
⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.3.3#code/JYOwLgpgTgZghgYwgAgApyhcBJZBvAKGWORgHsyAKASgC5kA3M4AEwIF8C4AjAZzCiIwyBABs4vXmgxZhhEsh79BCYeSp1GzNpwIB6PcgCyrFqJTAAtgAdzl2VPSZwjYHGQsIYjHDDAyIMj2UADmEAQE3pLGpubIEAAekCAsjjIueJygkLCIKCYsZiiJyanSzmC4mRFRUgDCABbAoizxSVhlBUX47MgGHmQQvCAA5MIA7mRQANYR-V1xVrYQ9uBpFR7AmKqiAJ6R4tELEABMbaXrsvhEJOo0PRw1h-VNLWclHVLHZ5l9hpMzXhAA

💻 Code
interface ParentI {
    foo(): void
}
abstract class Parent {
    abstract foo(): void
}

// Middle implements Parent via declaration merge

class Middle extends Parent {}
interface Middle extends ParentI {}

class Child extends Middle {} // doesn't work

// Middle implements Parent directly
class Middle2 extends Parent {
    foo() {}
}

class Child2 extends Middle2 {} // works
🙁 Actual behavior

Typescript complains that Child must implement an foo, even though Middle has already implemented foo via declaration merging.

🙂 Expected behavior

I would expect Child to pass type-checking, just as Child2 does. Seeing as how Middle (a concrete class) is type-safe and Child extends Middle with no further modification, this feels very surprising.

Additional information about the issue

No response

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la reproducción proporcionada de TypeScript Playground y compara el ejemplo de combinación de declaraciones con el caso Middle2 implementado directamente. Sigue el tratamiento que hace el compilador de los miembros abstractos a través de declaraciones combinadas de clase e interfaz y añade una prueba de regresión que muestre que Child pasa la comprobación de tipos sin implementar foo por sí mismo.

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
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.