2016-08-01 17 views
1

Ich arbeite mit Sequelize und Typoskript. Ich verwende diese Definition sequelize.d.tsTypescript falsche Schnittstelle für Sequelize.Model.Update?

fand ich ein Problem, die model.update Methode verwendet, wird diese Schnittstelle als erstes Argument die Werte, die aktualisiert werden, aber dieses Argument hat einen TAttributes Typen. Ich denke, dieses Argument sollte vom string Typ sein. weil wir diese Funktion verwenden können, indem wir nur eine Teilmenge von TAttributes senden.

Lassen Sie mich ein Beispiel setzen, wenn ich ein Modell wie dieses:

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

und dann, nach dem Erstellen und eine Instanz bestehen, möchte ich filed2 aktualisieren, sollte ich so etwas tun:

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

für dieses Beispiel, ich bin ein Typoskript Fehler haben, weil das erste Argument etwas vom Typ Person.attributes erwarten und ich bin nur die Teilmenge Bereitstellung {field2: 5}

Ich habe schon eine Frage in github gestellt, was denkst du darüber? Ich denke ok?

+0

Es ist nicht sehr klar, was die Frage ist. Gibt es ein technisches Problem, das Sie nicht beheben können? Oder möchten Sie nur Feedback zum GitHub-Problem? Wenn Feedback das ist, was du willst, ist Github der richtige Ort, um es nicht hier zu bekommen. – toskv

+0

@toskv, zur Verdeutlichung bearbeitet. Danke –

Antwort

2

Sie sollten die Attributsdeklaration von sequelize.d.ts mit optionalen Eigenschaftsnamen genau deshalb verwenden.

In Ihrem Fall müssen Sie tun:

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

dies tun, wenn Sie aktualisieren, verwenden Sie es werden Sie gezielt erlauben, nur eine Eigenschaft zu aktualisieren.

Sie können die Beispiele in sequelize-tests.d.ts für weitere Referenz überprüfen.

+0

Ich bin damit nicht einverstanden, denn wenn Sie 'PersonalAttributes' mit all seinen Attributen als optional definieren, können Sie beim Anlegen eines neuen Unternehmens die Pflichtattribute nicht kontrollieren. –

+0

Leider ist das ein Nachteil, der nicht einfach gelöst werden kann (ich bin einer der Hauptverantwortlichen von sequelize.d.ts). Beachten Sie, dass Sie eine andere Klassenmethode erstellen können, die mit den gewünschten Attributen typisiert ist. – drinchev

+0

Ich behalte die ursprüngliche Idee, definieren Sie das 'values' Argument als String. Duplizieren ist immer der falsche Weg, wenn Sie eine einfachere Lösung haben –

Verwandte Themen