РЕДАКТИРОВАТЬ (5 июня 2019 г.): Хотя идея о том, что «TypeScript поддерживает Map
изначально», по-прежнему верна, поскольку в версии 2.1 TypeScript поддерживает то, что называется Record
.
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
К сожалению, первый универсальный параметр (тип ключа) все еще не полностью соблюдается: даже с string
типом что-то вроде peopleA[0]
(a number
) все еще допустимо.
РЕДАКТИРОВАТЬ (25 апреля 2016 г.): приведенный ниже ответ является старым и не должен рассматриваться как лучший ответ. TypeScript теперь поддерживает «изначально» Карты, поэтому он просто позволяет использовать Карты ES6, когда выводом является ES6. Для ES5 он не предоставляет полифилы; Вы должны вставить их сами.
Для получения дополнительной информации, обратитесь к ответу Мохамеда Хегази ниже для более современного ответа, или даже к этому комментарию reddit для короткой версии.
Начиная с бета-версии 1.5.0, TypeScript еще не поддерживает Карты . Это еще не часть дорожной карты .
В настоящее время лучшим решением является объект с типизированным ключом и значением (иногда называемый hashmap). Для объекта с ключами типа string
и значениями типа number
:
var arr : { [key:string]:number; } = {};
Некоторые предостережения, однако:
- ключи могут быть только типа
string
илиnumber
- На самом деле не имеет значения, что вы используете в качестве типа ключа, поскольку числа / строки по-прежнему принимаются взаимозаменяемо (применяется только значение).
С приведенным выше примером:
// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too
// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value
values()
, как я бы сделалfor (var key in arr) ... arr[key]
илиfor...of
. Другое решение (которое становится все более и более реалистичным в настоящее время и будет на какое-то время для многих вещей) - это использовать corejs .map Map<string,string>=new Map<string,string>()
когда я делаюmap.set(something)
я получаю исключениеmap is undefined
, есть другой способ , чтобы инициализировать его?См. Комментарий в: https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
источник
Вот пример:
демонстрация
источник
TS2304
, пожалуйста, проверьте это: stackoverflow.com/questions/39416691/…Да, карта теперь доступна для машинописного текста. Если вы посмотрите в lib.es6.d.ts, вы увидите интерфейс:
Замечательно использовать в качестве словаря строки, пары объектов ... единственное неудобство в том, что если вы используете его для присвоения значений в другом месте с помощью Map.get (ключ), IDE, такой как Code, создаст вам проблемы с возможностью быть неопределенной .., а не создание переменной с определенной проверкой. просто приведите тип (при условии, что вы точно знаете, что на карте есть пара ключ-значение)
источник
Вы должны нацелиться
--module es6
. Это неудачно, и вы можете высказать свое беспокойство здесь: https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111источник
Как минимум:
TSconfig:
и установите полифил, такой как https://github.com/zloirock/core-js, если вам нужна поддержка IE <11: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /Карта
источник
Не уверен, если это официально, но это работает для меня в машинописи 2.7.1:
В простом
Map<keyType, valueType>
источник
С помощью опции lib config вы можете выбрать Map в свой проект. Просто добавьте
es2015.collection
в свой раздел lib. Если у вас нет конфигурации lib, добавьте ее со значениями по умолчанию и добавьтеes2015.collection
.Поэтому, когда у вас есть target: es5, измените tsconfig.json на:
источник
Typescript пока не поддерживает
Map
.Таблица совместимости ES6
источник
Добавить
"target": "ESNEXT"
свойство вtsconfig.json
файл.источник