javascript - Hur man dekonstruerar ett objekt och exkluderar en egenskap?


Jag vill dekonstruera ett objekt och utesluta en egenskap.

Det här är vad jag gör just nu:

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

Jag hittade en artikel om ES7 som säger att det finns en ny funktion för att utesluta egenskaper. Så ovanstående skulle skrivas så här:

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

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

Ovanstående fungerar inte i Angular 7 och jag får följande fel:

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

Jag kör för närvarande TypeScript 3.1.6, och min tsconfig.app.json-fil ser ut så här.

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

Här är föräldrafilen.

{
  "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"
    ]
  }
}

Nu tror jag att problemet är att raden "lib": ["es2017"] är för ES6.

Vad kan jag göra för att aktivera denna ES7-funktion och kommer det att bryta när man riktar sig mot ES5 som den kompilerade utdata från TypeScript?

Svar #1

Uppdatera helt enkelt din rad - let y={c, ...x}; med const {c, ...noC}=x;. Så din kod skulle vara -

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

console.log(noC);

Förslag: Det är en bra praxis att göra x konstant, om du inte tänker uppdatera det senare.

Svar #2

Beställningen bör vara så här

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

Relaterade artiklar