es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo extender una clase que utiliza un constructor de desestructuración en Typescript?

Mi pregunta es similar a esta, pero la clase que estoy intentando extender acepta un parámetro objeto.

Aquí está la clase que quiero extender:

  class ThreeJSOverlayView implements google.maps.WebglOverlayView {

  constructor({
    anchor = { lat: 0, lng: 0, altitude: 0 },
    rotation = new Float32Array([0, 0, 0]),
    scale = new Float32Array([1, 1, 1]),
    scene = new Scene(),
    map,
  }: ThreeJSOverlayViewOptions) {
  //cuerpo del constructor...
 }
  //resto del código
 }

Estoy extendiendo la clase solo para agregar el siguiente método que me permite leer algunos valores (cámara) que están protegidos por la clase original.

getCameraMatrices():Matrix4{
  return this.camera.projectionMatrix;
}

He intentado extender la clase sin implementar el constructor, pero no funcionó. Intenté lo siguiente pero no funcionó

export class CustomeThreeOverlay extends ThreeJSOverlayView{
constructor(options: ThreeJSOverlayViewOptions){
  super(options)
}
getCameraMatrices():Matrix4{
  return this.camera.projectionMatrix;
}

}

Puede encontrar el código completo para la clase que estoy intentando extender aquí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extender la clase ThreeJSOverlayView y agregar el método getCameraMatrices, necesita implementar el constructor en su subclase CustomThreeOverlay. El constructor en su subclase debe pasar el parámetro options al constructor de la superclase usando la palabra clave super, tal como lo hizo en su ejemplo de código. Aquí está el código corregido:

    export class CustomThreeOverlay extends ThreeJSOverlayView {
      constructor(options: ThreeJSOverlayViewOptions) {
        super(options);
      }
    
      getCameraMatrices(): Matrix4 {
        return this.camera.projectionMatrix;
      }
    }
    

    Esto debería funcionar, siempre y cuando el constructor de ThreeJSOverlayView inicialice la propiedad this.camera, que se utiliza en el método getCameraMatrices.

Comments are closed.