2016-08-01 50 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'參數定義爲字符串。當你有一個更簡單的解決方案時,重複總是錯誤的 –