如何解构对象并排除属性?

时间:2018-12-19 14:44:11

标签: javascript angular typescript ecmascript-7

我想解构对象并排除属性。

这就是我现在正在做的事情:

 let x = {a:1, b:2, c:3};
 let y = {...x};
 delete y.c;
 store.setState(y);

我找到了一篇有关ES7的文章,其中指出有一个新功能可以排除属性。所以上面的代码是这样写的:

 let x = {a:1, b:2, c:3};
 store.setState({c, ...x});

https://codeburst.io/use-es2015-object-rest-operator-to-omit-properties-38a3ecffe90

以上内容在Angular 7中不起作用,并且出现以下错误:

error TS2663: Cannot find name 'c'. Did you mean the instance member 'this.c'?

我当前正在运行TypeScript 3.1.6,我的 tsconfig.app.json 文件如下所示。

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "module": "es2015",
        "types": []
    },
    "exclude": [
        "src/test.ts",
        "**/*.spec.ts"
    ]
}

这是父文件。

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "importHelpers": true,
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

现在我认为问题在于"lib": ["es2017"]行是针对ES6的。

我该怎么做才能启用此ES7功能,它将以TypeScript的编译输出作为ES5的目标?

2 个答案:

答案 0 :(得分:6)

订购该商品

let { c, ...y} = x;

答案 1 :(得分:3)

只需用let y = {c, ...x};更新您的行-const {c, ...noC} = x;。所以你的代码应该是-

const x = {a:1, b:2, c:3};
const {c, ...noC} = x;

console.log(noC);

建议:如果以后不打算更新x,这是一个好习惯。