我有一个postclass定义为
@Table
class Post extends Model {
@Column
declare imgUrl: string
@Column
declare userId: string
@Column
declare username: string
@Column
declare profileImgUrl: string
}
但是,当我真正输入字段时,我总是发现自己不得不回头查看模型的源代码,并且由于忘记字段而导致许多错误
const post = new Post({
imgUrl: 'http://localhost/image.png',
profileImgUrl: 'http://localhost/image.png',
username: 'johnsmith',
})
在本例中,我没有指定所有字段,但也没有从vscode得到错误
所以我的问题是,当我将鼠标悬停在类上时,要让它显示所有字段,当我忘记字段时,要让它给予错误,这样我就不必总是回头查看源代码,该怎么做呢
1条答案
按热度按时间vc9ivgsu1#
您只需要将
class Post extends Model
更改为class Post extends Model<Post>
。请参见源代码中Model类的声明,地址为https://github.com/sequelize/sequelize/blob/main/packages/core/src/model.d.ts:
也就是说,将
Post
类本身作为泛型参数传递给TModelAttributes
泛型参数。我可以使用sequelize.js库的以下提取部分重现此过程:
它给你你想要的行为:
Post
构造函数调用参数中的VS代码建议(AKA autocomplete)建议为Post
类声明上面声明的字段,如果您没有填充所有字段,它将给予如下错误(当没有填充任何字段时):对于我为这个repro从库中提取的其他类型,请参见https://github.com/sequelize/sequelize/blob/main/packages/core/src/utils/types.ts。
您可能还想阅读有关
InferAttributes
和InferCreationAttributes
的信息,您可以像使用extends Model<InferAttributes<Foo>, InferCreationAttributes<Foo>>
一样使用它们。至于你问题的另一部分:
当我将鼠标悬停在类上时,要使它显示所有字段,需要执行什么操作
您可以通过向
Post
类添加文档注解来完成此操作,例如