在Flow 0.34中定义一个自定义的' toString '
Defining a custom `toString` in Flow 0.34
我有一些函数我想有一个自定义的toString
属性,像这样:
var Foo = function () {};
Foo.prototype.toString = function () { return 'hi'; };
下面是一个示例代码:
在Flow 0.33中没有错误,但在Flow 0.34中它产生一个错误:
4: Foo.prototype.toString = function () { return 'hi'; };
^ Object. Covariant property `toString` incompatible with contravariant use in
4: Foo.prototype.toString = function () { return 'hi'; };
^ assignment of property `toString`
这是一个bug在我的代码或流?
您可以使用any
类型转换来绕过协方差约束:
(Foo.prototype : any).toString = function () { return 'hi'; };
你的代码没有错,流只是强制一个特定的风格。
虽然Flow对这种类型的类声明的支持有限,但我强烈建议使用ES6语法。一次性声明风格有助于Flow更容易地理解代码。
class Foo {
toString() {
return 'hi';
}
}
一种超级愚蠢的方法(欺骗转译器;尽量避免):
Object.assign(Utils, { ['to'+'String']: (s/*:any*/)/*:string*/ => ''+ s });
我更喜欢上面答案中任意一个casting的例子。
(Utils/*:any*/).toString = (s/*:any*/)/*:string*/ => ''+ s;
然而,我也需要这个,(如果你改变方法签名,当你去调用它):
Utils.stringEquals = (a/*:any*/,b/*:any*/)/*:%checks*/ =>
(Utils/*:any*/).toString(a) === (Utils/*:any*/).toString(b);
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- SuiteScript2.0-包括一个自定义文件
- Wordpress在播放器旁边播放一个自定义的下载按钮,而不是下载
- SuiteScript:如何有一个自定义的数据字段来从数据库加载信息
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 调用另一个自定义指令的角度自定义指令
- 我想做一个自定义的dojo JsonRest商店,有一部分我没有'我不明白
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- 我想知道如何创建一个自定义对话框,当点击按钮时会弹出
- 在brunc.io中创建一个自定义JS目录
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 为谷歌工作表创建一个自定义函数
- Vaadin:调用一个自定义的JavaScript函数
- Tinymce-创建一个自定义的javascript保存按钮
- Wordpress创建一个自定义休息服务
- 如何在Angular 1.3.6上创建一个自定义过滤器来搜索嵌套数组
- 当我点击一个asp表元素时,我如何制作一个自定义弹出窗口
- 我对javascript中的一个自定义函数感到困惑,该函数将对象作为参数获取
- 为什么我们必须注册一个自定义元素
- 导入 serval WebComponent 时,上一个自定义元素被下一个元素覆盖