2016-08-01 30 views
1

我正在使用Sequelize和打字稿。我用这个定义sequelize.d.tsTypescript不正确的接口sequelize.Model.Update?

我发现使用model.update方法的问题,这个接口收到的第一个参数是将要更新的值,但是这种说法有一个TAttributes类型。我认为这个说法应该是string类型。因为我们只能通过发送TAttribute的一个子集来使用这个函数。

让我把一个例子,如果我有这样一个模型:

Person.attribues: { 
    id: number; 
    field1: string; 
    field2: number; 
} 

,然后,经过创建,坚持一个例子,我想更新filed2,我应该做这样的事情:

Person.update(
    {field2: 5}, 
    {where: {id: 1}} 
) 

在这个例子中,我有一个打字稿错误,因为第一个参数预期Person.attributes类型的东西,我只提供集{field2: 5}

我已经在github中做了一个问题,你怎么看待这个问题?我在想好吗?

+0

这个问题并不十分清楚。是否有任何技术问题,你有麻烦修复?或者你只是想在github问题上提供反馈?如果反馈是你想要的,github是让它不在这里的地方。 – toskv

+0

@toskv,为清晰起见编辑。谢谢 –

回答

2

您应该使用具有可选属性名称的属性声明sequelize.d.ts,正因为如此。

在你的情况,你需要做的事:

interface PersonAttributes { 
    id?: number; 
    field1?: string; 
    field2?: number; 
} 

通过这样做,当你使用更新将明确允许您更新只有一个属性。

您可以查看sequelize-tests.d.ts中的示例以作进一步参考。

+0

我不同意这一点,因为如果您将所有属性的“PersonalAttributes”定义为可选属性,那么当您创建新的instnace时,您无法控制必需的attrs。 –

+0

不幸的是,这是一个不容易解决的缺点(我是sequelize.d.ts的主要贡献者之一)。请记住,您可以创建另一个使用所需属性进行类型化的类方法。 – drinchev

+0

我保持原来的想法,将'values'参数定义为字符串。当你有一个更简单的解决方案时,重复总是错误的 –