标签: object-destructuring

使用对象分解时忽略属性变量

这是一个例子:

const initObject = {
  a: 0,
  b: 0,
  c: 0
}

const { a, ...rest } = initObject
Run Code Online (Sandbox Code Playgroud)

我们a从对象中省略属性,但随后const a为它分配了一个值,但从未使用过-eslint(无未使用的变量)产生错误。是否可以完全省略const a

javascript ecmascript-6 eslint object-destructuring

20
推荐指数
3
解决办法
1113
查看次数

未捕获的类型错误:无法解构“未定义”或“空”的属性“名称”

在传递空对象的情况下,对象解构会引发错误

function test ({name= 'empty'}={}) {
  console.log(name)
}
test(null);
Run Code Online (Sandbox Code Playgroud)

未捕获的类型错误:无法解构name“未定义”或“空”的属性。在测试 (:1:15) 在 :1:1

javascript ecmascript-6 object-destructuring

17
推荐指数
1
解决办法
8万
查看次数

解构/访问对象联合类型上可能存在或不存在的属性

我收到以下错误:

type Union = { type: "1"; foo: string } | { type: "2"; bar: number };

function doSomething = (object: Union) => {
  const { foo } = object
  //      ^ TS2339: Property 'foo' does not exist on type 'Union'.
  console.log(object.bar)
  //                 ^ TS2339: Property 'bar' does not exist on type 'Union'.
}
Run Code Online (Sandbox Code Playgroud)

期望的结果:

typeof foo === string | undefined
typeof bar === number | undefined
Run Code Online (Sandbox Code Playgroud)

如何在没有显式类型保护的情况下访问属性,例如:

const foo = o.type === 1 ? o.foo : undefined
const bar …
Run Code Online (Sandbox Code Playgroud)

destructuring typescript union-types object-destructuring

12
推荐指数
2
解决办法
5711
查看次数

7
推荐指数
0
解决办法
2491
查看次数

不定义变量名的JS对象解构

在 ES6 JS 中解构对象时,您可以使用{ a, b }语法从该对象创建新变量,分别调用ab。但是,据我所知,无法获取对象的键以自动创建具有这些名称的本地范围变量。在下面的例子中,我希望能够使用的假设的伪代码const {} = args;,它会产生const aconst b自动。

const bar = { a: 'apple', b: 'ball' };

const foo = (args) => {
  const { a, b } = args;
  console.log(a, b); // Great!
  const {} = args;   // I am aware this isn't valid syntax...
  console.log(a, b)  // Because of course, it doesn't work.
};

foo(bar);
Run Code Online (Sandbox Code Playgroud)

原因纯粹是因为,在这个 MCVE 之外,我实际上使用了一个带有数十个键的大型对象,我想将其中的某些值传递到 Promise 链的下一部分。我当然可以使用 …

javascript ecmascript-6 object-destructuring

6
推荐指数
1
解决办法
987
查看次数

Destructure对象参数,还要引用参数作为对象吗?

使用ES6,您可以在函数参数中构造对象:

({name, value}) => { console.log(name, value) }
Run Code Online (Sandbox Code Playgroud)

等效的ES5将是:

function(params) { console.log(params.name, params.value) }
Run Code Online (Sandbox Code Playgroud)

但是,如果我想什么了一个既参考params对象和嵌套的属性valuename?这是我得到的最接近的,但缺点是它不能用于箭头函数,因为它们无法访问该arguments对象:

function({name, value}) {
  const params = arguments[0]
  console.log(params, name, value)
}
Run Code Online (Sandbox Code Playgroud)

javascript destructuring ecmascript-6 object-destructuring

6
推荐指数
1
解决办法
1062
查看次数

为什么在使用分号时这个JavaScript不会被解释为代码块?

Chrome版本中,^72如果我运行以下内容JavaScript,则没有错误.

{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }
Run Code Online (Sandbox Code Playgroud)

因此意外地将代码行解释为表达式语句.

但是,如果我在结尾处使用分号运行相同的代码,它将按预期运行.

{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =
Run Code Online (Sandbox Code Playgroud)

这是预期的,因为初始{告诉JavaScript引擎它是一个代码块,除非我们用括号消除歧义.

为什么这会出现在分号上但不是没有呢?

javascript syntax google-chrome destructuring object-destructuring

6
推荐指数
1
解决办法
96
查看次数

对象传播错误导致没有消息属性

我正在尝试传播错误,以便我可以在不影响原始错误的情况下更改错误。

const error = new Error('Error test');

const freeError = {...error};
console.log(error, freeError);
Run Code Online (Sandbox Code Playgroud)

但输出是一个空对象{}。我期待freeError至少有一个 message 属性,但没有

这是 JavaScript 功能的一部分还是我的代码或引擎有问题?

我知道解决这个问题的方法,但它需要额外的工作{...error, message: error.message}。所以,是的,我所需要的只是澄清一下,这样我就可以确定我没有遗漏任何东西。谢谢你。

javascript custom-errors object-destructuring

5
推荐指数
1
解决办法
354
查看次数

我可以配置 VSCode 自动完成 JSDoc 的方式吗?

当我开始输入时,VSCode 可以自动完成 JSDoc,/**这很好,它甚至可以填充一些参数。

但是a)它将所有参数默认为*b)当我在函数定义中解构对象时它没有帮助。

例如,如果我有

const FloopThePig = ({pigCount, floopStrength}) => { ...
Run Code Online (Sandbox Code Playgroud)

然后自动完成 JSDoc 给我:

/**
 * @param {*} param0 
 */
const FloopThePig = ({pigCount, floopStrength}) => { ...
Run Code Online (Sandbox Code Playgroud)

当我真的想将其定制为类似的东西时

/**
 * @param {object} props
 * @param {unknown} props.pigCount 
 * @param {unknown} props.floopStrength
 */
const FloopThePig = ({pigCount, floopStrength}) =>
Run Code Online (Sandbox Code Playgroud)

我并不认为它必须是“未知”的,而是除了 之外的其他东西*,并且记录解构的参数是我一直在努力寻找的。

这可能吗?如果可能的话,如何实现?

javascript intellisense jsdoc visual-studio-code object-destructuring

5
推荐指数
0
解决办法
647
查看次数

React js重命名和解构数组长度

我有一个像下面这样的减少功能:

let el = scopes.reduce ((tot, {actions}) => tot + actions.length, 0);
Run Code Online (Sandbox Code Playgroud)

我试图这样改造它,但似乎它不是正确的方法:

let el = scopes.reduce ((tot, {actions.length: len}) => tot + len, 0);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者这是不可能的。

javascript ecmascript-6 reactjs object-destructuring

4
推荐指数
1
解决办法
241
查看次数