Búsqueda de sitios web

Typescript - aceptar keyof de la clase hija en una función de la clase base


Tengo una función en mi clase base que toma el nombre de una propiedad para observar:

class Parent {
    listenTo(prop: keyof this);
}

Luego tengo una clase hija, a la que quiero observar una de sus propias propiedades

class Child extends Parent {
    foo = 3;
    constructor() {
        this.listenTo('foo');
    }
}

Pero esto no funciona. Se queja de que 'foo' no es una de las claves válidas, y luego solo lista las claves de Parent, no de child. ¿Hay alguna manera de hacer que la declaración de la función en Parent observe el tipo real, y no solo a sí misma?

Respuesta #1

Probarlo ahora en el playground parece funcionar, pero necesitarás una llamada super:

class Parent {
    listenTo(prop: keyof this) {}
}

class Child extends Parent {
    foo = 3;
    constructor() {
        super();
        this.listenTo('foo'); // ok
        this.listenTo('foo2'); // error
    }
}

Área de juego de TypeScript

Asegúrate de que la versión de TypeScript esté actualizada