Map
не поддерживает это поведение. Он может быть расширен для хранения ключей и их поиска без учета регистра. Поскольку Map
внутренне использует set
при создании, это единственный метод, который необходимо дополнить.
Собственные классы должны обрабатываться особым образом при расширении в TypeScript с целью es5
. Это можно сделать так:
interface CaseInsensitiveMap<T, U> extends Map<T, U> {}
class CaseInsensitiveMap<T, U> {
constructor(entries?: Array<[T, U]> | Iterable<[T, U]>) {
return Reflect.construct(Map, arguments, CaseInsensitiveMap);
}
set (key: T, value: U): this {
if (typeof key === 'string') {
key = <T><any>key.toLowerCase();
}
return Map.prototype.set.call(this, key, value);
}
}