【问题标题】:How can I properly annotate a Sequelize model with flow-typed?如何使用流类型正确注释 Sequelize 模型?
【发布时间】:2019-09-12 16:15:13
【问题描述】:

我正在使用 flow-typedsequelize^4.44.3。它抱怨是因为Model 没有参数。但这似乎是使用 Sequelize 创建模型的标准方法,那我做错了什么?

【问题讨论】:

标签: sequelize.js flowtype flow-typed


【解决方案1】:

让我们take a look at the libdef

如您所见,Model 类定义为:

class Model<TAttributes, TInitAttributes = TAttributes, TPlainAttributes = TAttributes>

这里有三个类型参数,后两个是可选的,因为默认为第一个。所以让我们一一分解:

TAttributes

这是代表模型类属性的对象类型。我可以在您的屏幕截图中看到您有一个名为name 的字符串字段。让我们假设您在Conversation 中也有一些参与者。因此,对于只有这两个字段的模型,您的 TAttributes 可能如下所示:

type ConversationAttributes = {
  name: string,
  participants: number,
};

现在我们可以将这个定义了我们属性的类型作为类型参数传递给Model类来定义我们的模型:

class Conversation extends Model<ConversationAttributes> {
  // ...

这应该可以正常工作,但我们还有其他一些选择:

TInitAttributes

默认为TAttributes,因此在我们的示例中它将是ConversationAttributes,因此在这种情况下我们不需要指定它。

TInitAttributes 是用于构造新记录的类型。如果由于某种原因此类型与 TAttributes 不同,您可以在此处指定它(可能在 TAttributes 上存在某些计算属性但在 TInitAttributes 上没有意义的情况下。

TPlainAttributes

默认为TAttributes,因此在我们的示例中它将是ConversationAttributes,因此在这种情况下我们不需要指定它。

TPlainAttributestoJSON 方法的返回类型,也是get 方法在传递{plain: true} 作为选项时的返回类型。如果我们的属性的“普通”序列化在某些方面与TAttributes 不同,我们可以在此处指定“普通”版本的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2016-11-20
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多