Найти объект в массиве с помощью TypeScript
есть ли канонический способ найти объект в массиве с TypeScript?
Я знаю, что TypeScript реализовал множество функций ES6, и ES6 может это сделать:
[{"id":1}, {"id":-2}, {"id":3}].find(myObj => myObj.id < 0)
// returns {"id":-2}
однако я не вижу найти на TS дорожная карта.
очевидно, что это можно сделать старомодным способом с помощью ES5 Javascript. Дело в том, что TypeScript отслеживает функции ES6, поэтому я спрашиваю, возможен ли более приятный способ, предпочтительно что-то вроде показанного примера ES6 выше.
5 ответов:
Часть Первая - Полифилл
для браузеров, которые не реализовали его, полифилл для
array.find
. любезно предоставлено 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; }; }
Часть Вторая - Интерфейс
вам нужно расширить интерфейс открытого массива, чтобы включить
find
метод.interface Array<T> { find(predicate: (search: T) => boolean) : T; }
когда это прибудет в TypeScript, вы получите предупреждение от компилятора, который напомнит вам удалить это.
Часть третья-используйте его
переменной
x
будет иметь ожидаемый тип...{ id: number }
var x = [{ "id": 1 }, { "id": -2 }, { "id": 3 }].find(myObj => myObj.id < 0);
игра с tsconfig.формат JSON Вы также можете настроить таргетинг на es5 следующим образом:
{ "compilerOptions": { "experimentalDecorators": true, "module": "commonjs", "target": "es5" } ...
для некоторых проектов проще установить свою цель в
es6
в своемtsconfig.json
.{ "compilerOptions": { "target": "es6", ...