2016-07-14 1 views
0

У меня есть набор констант, похожегоПроверьте в коде несуществующего свойство запрашивается

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

Иногда ключи переименованы или добавлены или удалены, поэтому структура codes изменения объектов. Поскольку приложение является довольно большим, я был бы рад статический анализировать код с некоторым инструментом, как JSLint/TSLint для случаев, когда функция запуска с кодом, который больше не доступно:

runServerRequest(codes.DEPOSIT_FUNDS_SPECIAL_CASE, 500) 

В приведенном выше примере DEPOSIT_FUNDS_SPECIAL_CASE является не присутствует в объекте кодов, поэтому было бы здорово получить предупреждение от анализатора. Во всех возможных случаях не должно быть случаев, когда запрашивается несуществующее поле.

Как решить эту задачу самым простым способом?

+0

Вопрос заключается в том, что коды объекта генерируется автоматически по команде сервера парней и выталкивается к репо. –

+0

Если вы используете машинопись, тогда компилятор должен жаловаться на это, [как здесь] (https://www.typescriptlang.org/play/#src=let%20codes%20%3D%20%7B%0A%09 % 09OPEN_ACCOUNT% 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_ACCOUNTS)% 3B) –

+0

Да, приложение находится в середине перехода на TypeScript, поэтому кодовая база представляет собой сочетание JS + TS, вероятно, это будет исправлено, если весь код находится в TypeScript. –

ответ

1

способ сделать это, чтобы создать Proxy object, что будет бросать, если доступ к несуществующей собственности:

// 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] 
    } 
}); 

get method поглотит все доступы к code.some_property и бросить, если он не определен ,
Обратите внимание, что это не будет выбросить, если свойство явно установлено в undefined.

Can I Use?

+0

Он ищет статическое аналитическое решение, на самом деле это не поможет узнать о них во время выполнения (например, в производстве). –

+0

Я ищу статический способ анализа этой проблемы. как сказал Ницан. –

+0

@ Серджи Да. Я решил, что оставлю его здесь, если кто-то сможет использовать его в будущем. –

Смежные вопросы