我想在我的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
并生成一个新的。但是,现在没有Map
上的其他方法,如.set()
,对我可用,并且我的代码抛出错误。这些现在是undefined
。
有什么想法如何处理这个问题吗?我在我的小脑袋里想象这可能是某种tsconfig.json
问题,但我不知道。
1条答案
按热度按时间yquaqz181#
创建一个子类通常比改变原型更好(如果你是唯一一个改变原型的人,那就更好了)