ES6 / TS: разрушение объекта при вызове функции - PullRequest
1 голос
/ 14 апреля 2019

Каким было бы остроумное сокращение ES6 + / TS для достижения деструктуризации объекта при вызове функции?

Давайте предположим, что функция Javascript широко используется и ее сигнатура не может быть изменена

const foo = (b, a) => console.log(b, a);
foo(66,55);                  // 66, 55

И объект, который используется для предоставления значений для параметров вызова

const o = {a: 55, b: 66 };
foo(o.b, o.a);               // 66, 55       <-- can we find a short-hand ?    

Некоторые звонки не попадают в цель

    foo(...Object.values(o)) // 55, 66 (no, JS object keys are unordered by definition)
    foo(...o);               // TypeError (short, but not valid, illustration only)
    foo(({b, a} = o));       // {a: 55, b: 66} undefined (no error, but we want 66, 55)

1 Ответ

0 голосов
/ 14 апреля 2019

Если вы не можете изменить сигнатуру функции, то вы должны вызывать ее с каждым аргументом в правильном порядке.

И это невозможно для деконструкции объекта, поскольку карта не имеет никакого порядка.

Вы можете сделать что-то подобное с помощью apply :

foo.apply(null, Object.values(o));

Но вам не гарантирован порядок значений.

function foo(a,b){return a*b-a}
foo(3,1) // => 0
foo(1,3) // => 2
var o1 = {a:3,b:1}
foo.apply(null,Object.values(o1)) // => 2
var o2 = {b:3, a:1}
foo.apply(null,Object.values(o2)) // => 0

Так остроумного способа сделать это не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...