javascript - Flowtype - 如何为类工厂编写声明,例如 Backbone 模型?

标签 javascript backbone.js flowtype

大量谷歌搜索和阅读 Flow 文档和示例并未显示 Javascript 中非常常见模式的任何示例 - 具有返回类的函数。一个典型的例子是 Backbone:

var User = Backbone.Model.extend({
  getFullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }
});  


var exampleUser = new User();
exampleUser.set('firstName', 'Johny'); //set() is a method from Backbone.Model
exampleUser.set('lastName', 'Something');
exampleUser.getFullName(); //method coming from User class

在 JSDoc 中,我可以按如下方式注释类,一些 IDE 能够找出合适的自动完成:

/**
 * @class User
 * @augments Backbone.Model
 */
var User = Backbone.Model.extend(/**@lends User.prototype */{
  getFullName: function() {...}
});

有什么方法可以在 Flow 中正确注释此模式?

最佳答案

/* @flow */

class Model {
    get(name: string): any {}
    set(name: string, value: any): void {}
}

function extend<T>(def: T): Class<Model & T> {
    throw new Error('not implemented')
}

var User = extend({
    getFullName: function() {
        return this.get('firstname') + this.get('lastname')
    }
})

var a = new User

a.get('firstname')
a.getFullName()
// a.notExisting give error

我使用 intersection typegeneric type表达“给定一个定义对象类型T,返回一个既是Model又是T<的Class”的模式'

此代码在 brew-shipped flow 0.11 下编译


以下是我个人对心流的看法。我必须同意流程文档很少。了解其功能的最佳方式可能是阅读流的 React annotation and flow's source. Flow 基于一种复杂的类型推断算法,它允许您在没有注释的情况下对程序进行类型检查。所以 Flow 的设计目的是让你不用注释,它的文档也是如此。然而,类型推断并没有先进到可以免于注解的地步。你的代码就是一个例子。

关于javascript - Flowtype - 如何为类工厂编写声明,例如 Backbone 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023860/

相关文章:

javascript - React-router(v4)否定双正斜杠

javascript - backbone.js 事件绑定(bind)破坏了单选按钮的功能

javascript - Backbone.js 设置导致集合中的模型再次成为 "initialize"

javascript - Flow 给我 React Native 类型定义/代码的错误

javascript - 为什么我使用位图缓冲区在索引和 x,y 之间转换的算法会导致图像垂直翻转?

javascript - 每 5 秒更换一次背景图片

javascript - 使用 Underscore _.debounce() 触发单个事件

javascript - 如何通过backbone.js通过数据库开发CRUD

javascript - 流类型: How to create an instance of an exact type from a class

react-native - 如何将 TouchableOpacity Props 类型与其他字段结合起来