Closed
Description
While verifying a certain spread pattern, I noticed the nested object.assign
transpiled code and was wondering if that's necessary. The flattened object.assign
produces just the same output.
TypeScript Version: 3.9.2 in REPL
Search Terms:
nested object.assign, object spread
Code
source
let aname = "John"
let xname = ""
let yname = xname
let zname
let active = true
const isDefined = (value: any) => typeof value !== 'undefined'
const result = {
...(aname && { aname }),
...(xname && { xname }),
...(isDefined(yname) && { yname }),
...(isDefined(zname) && { zname }),
...(isDefined(active) && { active })
}
console.log(result)
const result2 = Object.assign({}, (aname && { aname }), (xname && { xname }), (isDefined(yname) && { yname }), (isDefined(zname) && { zname }), (isDefined(active) && { active }));
console.log(result2)
result
"use strict";
let aname = "John";
let xname = "";
let yname = xname;
let zname;
let active = true;
const isDefined = (value) => typeof value !== 'undefined';
const result = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (aname && { aname })), (xname && { xname })), (isDefined(yname) && { yname })), (isDefined(zname) && { zname })), (isDefined(active) && { active }));
console.log(result);
const result2 = Object.assign({}, (aname && { aname }), (xname && { xname }), (isDefined(yname) && { yname }), (isDefined(zname) && { zname }), (isDefined(active) && { active }));
console.log(result2);
output
{aname: "John", yname: "", active: true}
{aname: "John", yname: "", active: true}
Expected behavior:
Actual behavior:
Metadata
Metadata
Assignees
Labels
No labels