2013-09-30 5 views
3

Я использую Closure Compiler в течение некоторого времени, и я был интересно, если есть какой-то двигатель, чтобы сделать во время выполнения проверок типов данных типа выполнения.Javascript проверка двигателя

Факт типов позволяет людям делать меньше ошибок. Например, в Haskell, скажем Int, любой тип данных должен иметь значение, вы просто не можете указать null или undefined, если это не разрешено. В любом случае вы можете указать обертку, такую ​​как Maybe Int, чтобы сделать ее nullable. Это означает, что значение равно null или нет, и если оно не является нулевым, вы можете извлечь значение. Но сначала вы должны проверить, является ли оно нулевым, и нет возможности сначала получить доступ к значению.

Закрытие компилятора делает довольно хорошую работу, проверяя типы данных статически. Некоторые вещи отсутствуют, например, более сильные null/undefined валидации. Другие вещи, которые уходят от Closure Compiler: проверки типов с данными, загруженными с сервера. Даже если вы доверяете своему серверу, технические характеристики меняются, и ваш код тоже. Тесты могут проверять подобные несоответствия, но было бы лучше, если бы эти проверки могли происходить непосредственно в коде. Они могут даже регистрировать найденные ошибки при попытке сопоставить тип.

Следующий код является минималистский пример ответа сервера:

/** 
* Server result data types 
* @param {T} t [description] 
* @template T 
*/ 
ServerResult = { 
    /** 
    * Result code from server 
    * @type {Number} 
    */ 
    code: 0, 

    /** 
    * Result data from server 
    * @type {T} 
    */ 
    data: null, 

    /** 
    * Message of the server in case something didn't go as expected 
    * @type {String} 
    */ 
    message: '' 
}; 

Result.data может быть даже другой тип данных (запись, к примеру). Прямо сейчас, что я делаю, это рекурсивно проверьте тип , содержащийся в экземпляре по умолчанию и сравните его с загруженной версией.

  1. Есть ли лучший способ сделать это?
  2. Есть ли библиотека, которую я мог бы использовать вместо переписывания колеса?
  3. Это вздор?

ответ

3

Есть немало библиотек там, чтобы помочь проверить типы данных в JavaScript, но я считаю, наиболее полным и популярным является tcomb (и связанные с ним библиотеки tcomb-validation).

Существует также joi от людей, которые создали hapi для Node.js. Тем не менее, я обнаружил, что попытка запустить joi в браузере может быть проблемой. Кроме того, мне было сложнее захватывать сложные типы данных с помощью joi по сравнению с tcomb, но это будет зависеть от вашего варианта использования.

2

Вы также можете попробовать Runtyper - плагин Babel, который выполняет проверку типов во время выполнения. По сравнению с tcomb он не заставляет вас писать аннотации типов. Вместо этого он угадывает тип переменной из самой операции.

Для примера, если результат сервера содержит неправильное code значение:

var ServerResult = { 
    code: 'unknown', 
    ... 
} 

, а затем сравнить code с номер:

if (ServerResult.code === 0) { ... } 

Runtyper покажет предупреждение в консоли:

Строгое сравнение ди (строка) === 0 (номер)

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