Typescript 如何向不可变js映射添加方法
我想给immutable js添加一个非常简单的方法来简化调试Typescript 如何向不可变js映射添加方法,typescript,typescript-typings,flowtype,immutable.js,Typescript,Typescript Typings,Flowtype,Immutable.js,我想给immutable js添加一个非常简单的方法来简化调试 log(msg) { console.log(msg, this.toJS()); return this; } 基本上,我可以使用它调试链式表达式,如: someImmutableMap .toList() .slice(index, index + ITEMS_PER_PAGE) .filter(index => !!index) .log('Filter: ') .map(griddleMa
log(msg) {
console.log(msg, this.toJS());
return this;
}
基本上,我可以使用它调试链式表达式,如:
someImmutableMap
.toList()
.slice(index, index + ITEMS_PER_PAGE)
.filter(index => !!index)
.log('Filter: ')
.map(griddleMapper)
.toJS()
这样的事情已经存在了吗?如果没有,如何将其添加到Map
类中,以便提出拉取请求
我已尝试将其添加到src/Map.js
类定义中的Map
中,并为其添加简单测试,但测试失败,类型“Map”上不存在属性“log”。
我怀疑这是因为我需要在类型定义中定义类型,但我从未使用过typescript/flow等,所以我完全不知所措
是我的叉式回购协议,上面我做了一些基本的修改
非常感谢您的帮助。您可以像这样扩展该系列的原型(基本类型):
或者在es6类样式中,只需将log()
方法移到上面即可。但正如loganfsmyth在上文中所指出的那样,它通常是不受欢迎的,因为它经常导致混乱和兼容性问题
另一个选项是仅使辅助对象fn类似于:
function logImmutable(msg, obj){
console.log(msg, obj.toJS());
return obj;
}
那么你可以这样称呼它:
logImmutable('Filter', someImmutableMap
.toList()
.slice(index, index + ITEMS_PER_PAGE)
.filter(index => !!index)) // note the extra paren :-P
.map(griddleMapper)
.toJS();
虽然我同意开发者用户体验和整体可读性会受到影响
另一种选择是使用类似的东西扩展基本console.log()
行为,以便更好地处理immutable.js对象。一般来说,将函数添加到您不拥有的类型是不好的做法。您好,感谢您的输入。我可能不清楚,但我想做的是在不可变的js上提出一个pull请求,这样它就有可能作为一个新特性正式添加到库中。我本来打算提出一个关于github回购协议的问题,但它建议我向他们提出一个请求,让他们审查,这就是我因为不熟悉类型脚本而陷入困境的地方。我认为它对其他用户来说可能是一个有用的功能。logImmutable
函数是一个很好的中间解决方案,谢谢
logImmutable('Filter', someImmutableMap
.toList()
.slice(index, index + ITEMS_PER_PAGE)
.filter(index => !!index)) // note the extra paren :-P
.map(griddleMapper)
.toJS();