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;
