2017-10-30 5 views
3

Für ein Objekt xDestrukturierung verschiedene Arten in JS

const x = { 
a: 'foo', 
b:() => { return 'bar') 
} 

Ist es möglich, x denaturiert, sowohl a und b als Strings in einem einzigen Schritt zu bekommen?

{a, <something with b?>} = x 
console.log(a, b) // 'foo bar' 

Auf einer breiteren Anwendungsbereich, ich bin verwirrt, wie sauber

In der realen Welt in einem einzigen Objekt verschiedene Typen enthalten destrukturiert zu, ist a ein Aufruf und b ist ein verschachteltes Objekt

const x = { 
a: c(), // returns an object 
b: { 
    x: {...}, 
    y:() => {...} 
} // is an object 
} 

// is this even doable 
{< some magic stuff >} = x 
typeof a === typeof b //true 
+3

Strukturierung kann keine Funktionen aufrufen. – SLaks

+1

Strukturierungszuweisungen sind ausschließlich für reguläre Objekte und Arrays gedacht, nicht für exotische Objekte. Darüber hinaus beinhaltet Destrukturierung weder eine implizite noch eine explizite Typkonvertierung. Der Typ des zugeordneten Wertes und der Typ der entsprechenden Objekteigenschaft sind immer gleich. Es ist ein mechanischer Prozess. – ftor

Antwort

3

AFAIK, das ist nur möglich mit property getter wenn das eine Option ist:

const x = { 
 
a: 'foo', 
 
get b() { return 'bar' } 
 
} 
 

 
const {a, b} = x 
 
console.log(a, b) // 'foo bar'

+0

Das war nicht die Antwort, die ich erwartet habe, aber es funktioniert. Und obwohl ich anfangs zögerte, verbesserte die Verwendung von Gettern die Gesamtstruktur meines Moduls. Vielen Dank! – kuzyn

Verwandte Themen