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

How to deconstruct an object and exclude a property?

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

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

 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 功能,它是否会破坏将 ES5 作为 TypeScript 的编译输出?

顺序应该是这样的

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

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

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

console.log(noC);

建议:如果您以后不打算更新它,最好将 x 设为常量。