【发布时间】:2022-11-30 21:11:10
【问题描述】:
我想在我的 React TypeScript 应用程序中扩展 TypeScript Map 类型,以允许我使用 .map(),就像您使用 Array 一样。
我发现 this post 描述了几种方法,但对我来说最自然的 TypeScript 是 Jeremy Lachkar 的答案,尽管它不是很流行。这意味着我不必在客户端代码中引入任何笨拙的语法,只需扩展 Map 对象即可。
他的代码如下所示:
export {}
declare global {
interface Map<K, V> {
map<T>(predicate: (key: K, value: V) => T): Map<V, T>
}
}
Map.prototype.map = function<K, V, T>(predicate: (value: V, key: K) => T): Map<K, T> {
let map: Map<K, T> = new Map()
this.forEach((value: V, key: K) => {
map.set(key, predicate(value, key))
})
return map
}
我对此进行了扩充,以使其对我来说看起来更自然(我认为界面中的 Map<V, T> 在任何情况下都可能是错误的):
export {}
declare global {
interface Map<K, V> {
map<T>(predicate: (key: K, value: V) => T): Map<K, T>;
}
}
Map.prototype.map = function<K, V, T>(predicate: (key: K, value: V) => T): Map<K, T> {
let map: Map<K, T> = new Map();
this.forEach((key: K, value: V) => {
map.set(key, predicate(key, value));
});
return map;
}
这很好用。我现在可以映射我的Map 并生成一个新的。但是,现在Map 上的其他方法(例如.set())都对我不可用,而且我的代码会抛出错误。这些现在是undefined。
知道如何处理这个吗?我在我的小脑袋里想象这可能是某种tsconfig.json 问题,但我不知道。
【问题讨论】:
标签: javascript typescript dictionary interface prototype