Destrukturering av async-egenskaper i JavaScript/TypeScript


Finnes det en måte å få async-egenskaper med destrukturering i JavaScript/TypeScript?

Slik:

class A {
  public get x() {
    return this.getX()
  }

  private async getX() {
    return 5
  }
}

async function f(a : A) {
  const { x } = a

  console.log(x) // Promise
}
async function g(a : A) {
  // works as const x = await a.x
  const { await x } = a

  console.log(x) // 5
}

Svar #1

Hvis bruk av hjelpefunksjon er tillatt, vil følgende fungere.
Dens bivirkning er at getterne for alle egenskaper blir utført.

const classToObject = async theClass => {
  const originalClass = theClass || {}
  const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(originalClass))
  let classAsObj = {}
  for(const key of keys) {
    classAsObj[key] = await originalClass[key]    
  }
  return classAsObj
}


async function g(a : A) {
  // works as const x = await a.x
  const {x} = await classToObject(a);
  console.log(x) // 5
}