我在TypeScript中使用Map字典,我希望get和has属性不区分大小写。我怎样才能做到这一点?
let envVariables = new Map<string, string>();
envVariables.set('OS', 'Windows_NT');
envVariables.set('USERNAME', 'SYSTEM');
if (this.envVariables.has('UserName')) {
// this should work with case insensitive search
}
在C#中,Dictionary构造函数只需要StringComparer.OrdinalIgnoreCase,然后字典将不区分大小写。
答案 0 :(得分:4)
Map
不支持此行为。它可以扩展,以便以不区分大小写的方式存储和查找密钥。由于Map
在内部使用set
构建,因此它是唯一需要增强的方法。
在使用es5
目标的TypeScript中进行扩展时,应以特殊方式处理本机类。可以这样做:
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);
}
}