Extending array primitive in typescript (angular-cli project)
I needed the ability to easily sort collections, and I decided to extend the Array primitive. I understand this is considered bad practice in most cases, but this will only be used internally (not for a shared library). No matter which approach I try, I am not getting a working result. I keep getting an error: TypeError: Attempted to assign to readonly property
. This is a simplified example of my last iteration. I have a more complete version of this working in the playground , so I'm guessing the problem is with the angular-cli config / build process ???
interface Array<T> { $sortBy(sortKey:string): T[]; } if (!Array.prototype['$sortBy']) { Object.defineProperty(Array.prototype, '$sortBy', { value: function(sortKey) { return this.sort( function(a, b) { // TypeError here??? if (a[sortKey] < b[sortKey]) { return -1; } if (a[sortKey] > b[sortKey]) { return 1; } return 0; }); } } }
I have also tried this approach, but my IDE (VSCode) is giving me an error: [ts] Property '$sortBy' does not exist on type 'any[]'.
Intellisense error here | V Array.prototype.$sortBy = function(sortKey:string){ return this.sort( function(a, b) { ... }); }
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"lib": [
"es2016"
]
}
}
tsconfig.app.json
{
"extends": "../tsconfig.json",
"compilerOptions": {
"lib": [
"es2016",
"dom"
],
"outDir": "../out-tsc/app",
"target": "es5",
"module": "es2015",
"baseUrl": "",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
source to share
No one has answered this question yet
See similar questions:
or similar: