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
}
