2016-07-14 39 views
0
angefordert wird

Ich habe eine Reihe von Konstanten, die aussehen wieÜberprüfen Sie, ob irgendwo im Code eine nicht vorhandene Eigenschaft

let codes = { 
    OPEN_ACCOUNT: 1000, 
    CLOSE_ACCOUNT: 1001, 
    DEPOSIT_FUNDS: 3000 
    ... 
} 

Manchmal werden die Schlüssel umbenannt oder hinzugefügt oder entfernt werden, so dass die Struktur der codes Objekt ändert sich. Da die App recht groß ist, würde ich glücklich sein, statisch den Code mit einigen Tool wie JSLint/TSLint für Fälle zu analysieren, wenn Funktionen mit dem Code ausführen, der nicht mehr verfügbar ist:

runServerRequest(codes.DEPOSIT_FUNDS_SPECIAL_CASE, 500) 

Im Beispiel oben DEPOSIT_FUNDS_SPECIAL_CASE ist nicht im Code-Objekt vorhanden, so wäre es toll, eine Warnung vom Analysator zu haben. In allen möglichen Fällen sollte es keine Fälle geben, in denen ein nicht existierendes Feld angefordert wird.

Wie gehe ich diese Aufgabe am einfachsten an?

+0

Das Problem ist, dass Codes Objekt erzeugt wird automatisch vom Server Team Jungs und an den Repo geschoben. –

+0

Wenn Sie Typoskript verwenden, sollte der Compiler darüber beschweren, [wie hier] (https://www.typescriptlang.org/play/#src=let%20codes%20%3D%20%7B%0A%09 % 09OPEN_KONTO% 3A% 201000% 2C% 0A% 09% 09CLOSE_ACCOUNT% 3A% 201001% 2C% 0A% 09% 09DEPOSIT_FUNDS% 3A% 203000% 0A% 09% 7D% 0A% 0A% 09console.log (codes.OPEN_KONTEN)% 3B) –

+0

Ja, die App ist in der Mitte der Migration zu TypeScript, so dass Codebase jetzt eine Mischung aus JS + TS ist, wahrscheinlich wird es behoben, wenn der gesamte Code in TypeScript ist. –

Antwort

1

Ein Weg, dies zu tun, ist ein Proxy object einrichten, die werfen, wenn Sie eine nicht vorhandene Eigenschaft zugreifen:

// define codes above this line. 
codes = new Proxy(codes, { 
    get: function(target, prop) { 
    if (!target.hasOwnProperty(prop)) { 
     throw new Error('Attempting to use the deleted code `' + prop + '`.'); 
    } 
    return target[prop] 
    } 
}); 

Der get method Wille Falle alle code.some_property greift und werfen, wenn sie nicht definiert ist .
Beachten Sie, dass nicht wird, wenn die Eigenschaft explizit auf undefined festgelegt wurde.

Can I Use?

+0

Er ist auf der Suche nach einer statischen Analyse Lösung, es wird nicht wirklich helfen, über diejenigen zur Laufzeit (in der Produktion zum Beispiel) –

+0

Ich bin auf der Suche nach einer statischen Möglichkeit, dieses Problem zu analysieren. wie Nitzan sagte. –

+0

@Sergei Ja. Ich dachte, ich würde es hier lassen, für den Fall, dass jemand es in Zukunft benutzen kann. –