Typescript 如何向不可变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

我想给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(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();