Trova object nell’array usando TypeScript

Esiste un modo canonico per trovare un object in un array con TypeScript?

So che TypeScript ha implementato molte funzionalità di ES6 e ES6 può farlo:

[{"id":1}, {"id":-2}, {"id":3}].find(myObj => myObj.id < 0) // returns {"id":-2} 

Tuttavia non riesco a vedere la ricerca nella tabella di marcia di TS .

Ovviamente questo può essere fatto alla vecchia maniera con ES5 Javascript. Il punto è che TypeScript sta monitorando le funzionalità di ES6, quindi ti sto chiedendo se è ansible un modo migliore, preferibilmente qualcosa come l’esempio ES6 mostrato sopra.

Parte prima – Polyfill

Per i browser che non l’hanno implementato, un polyfill per array.find . Per gentile concessione di MDN .

 if (!Array.prototype.find) { Array.prototype.find = function(predicate) { if (this == null) { throw new TypeError('Array.prototype.find called on null or undefined'); } if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } var list = Object(this); var length = list.length >>> 0; var thisArg = arguments[1]; var value; for (var i = 0; i < length; i++) { value = list[i]; if (predicate.call(thisArg, value, i, list)) { return value; } } return undefined; }; } 

Parte seconda - Interfaccia

È necessario estendere l'interfaccia Array aperta per includere il metodo find .

 interface Array { find(predicate: (search: T) => boolean) : T; } 

Quando questo arriva in TypeScript, riceverai un avvertimento dal compilatore che ti ricorderà di cancellarlo.

Parte terza - Usalo

La variabile x avrà il tipo previsto ... { id: number }

 var x = [{ "id": 1 }, { "id": -2 }, { "id": 3 }].find(myObj => myObj.id < 0); 

Giocare con tsconfig.json Puoi anche scegliere come target es5 come questo:

 { "compilerOptions": { "experimentalDecorators": true, "module": "commonjs", "target": "es5" } ... 

Per alcuni progetti è più semplice impostare il target su es6 nel tuo tsconfig.json .

 { "compilerOptions": { "target": "es6", ... 

Potresti semplicemente usare la libreria di sottolineatura.

Installalo:

  npm install underscore --save npm install @types/underscore --save-dev 

Importa

  import _ = require('underscore'); 

Usalo

  var x = _.filter( [{ "id": 1 }, { "id": -2 }, { "id": 3 }], myObj => myObj.id < 0) ); 

Se hai bisogno di alcuni miglioramenti di es6 non supportati da Typescript, puoi scegliere come target es6 nel tuo tsconfig e usare Babel per convertire i tuoi file in es5.