如何使用 flow-typed 正确注释 Sequelize 模型?

How can I properly annotate a Sequelize model with flow-typed?

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

我们take a look at the libdef.

如您所见,Model class 定义为:

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

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

TA属性

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

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

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

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

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

TInitAttributes

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

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

TPlainAttributes

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

TPlainAttributestoJSON方法的return类型,传递[=29=时也是get方法的return类型] 作为选项。如果我们属性的 "plain" 序列化在某些方面不同于 TAttributes,我们可以在此处指定 "plain" 版本的类型。