Búsqueda de sitios web

Typescript: Accediendo a una propiedad del padre desde un objeto hijo en una constante


En este código de Typescript/Javascript:

var v= {
  x: 1,
  y: {
    z: v.x,
  }
}

const c = {
  x: 1,
  y: {
    z: c.x,
  }
}

v está bien porque var es JavaScript y no se queja, pero al asignar z en c hay un error debido al uso de z antes de su declaración.

Mi pregunta: ¿hay una manera de obtenerlo? (Sé que podría declarar otra x fuera de c y asignarle su valor dentro, pero me refiero a algo más directo)

Respuesta #1

Ambos ejemplos generarán un error ya que v aún no existe en el momento en que se evalúa la expresión v.x:

var

var v= {
  x: 1,
  y: {
    z: v.x, // TypeError
  }
}

const

const c = {
  x: 1,
  y: {
    z: c.x, // TypeError
  }
}

Tendrás que recurrir a agregar el objeto después de que c se inicialice:

const c = {
  x: 1
}

c.y = { z: c.x };

console.log(c.y.z);

Respuesta #2

Una posibilidad es hacer que z sea perezoso:

var v = {
   x: 1,
   y: {
      z: () => v.x,
   }
}

const c = {
   x: 1,
   y: {
      z: () => c.x,
   }
}

console.log(v.y.z());
console.log(c.y.z());