@itsjustmypage

Как вы делаете проверку типа аргументов функции?

Как вы делаете проверку типа аргументов функции, если делаете вообще? Например:

function sum( x, y ) {
    return x + y;
}

sum( '5', 6 );


P.S. Typescript избавляет от неправильного вызова только на момент компиляции в Javascript.
  • Вопрос задан
  • 432 просмотра
Пригласить эксперта
Ответы на вопрос 3
Amazing-Space-Invader
@Amazing-Space-Invader
веб-хипстер
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Увы, для runtime аргументы проверяю самописным кодом с давних времен 2011-2012 года, тогда решения готового не нашел. Забавно, сейчас кстати занят глубоким рефакторингом этой части, с целью оформления в ES6 модуль и на гит хаб.
Для проверки аргументов, в начале тела проверяемой функции вызываю функцию проверки типов и количества обязательных аргументов, которая может бросить исключение по шаблону с указанием имени внешней функции, которое вытягивается со стека. Все типы - битовая маска, ну и по этому очень хорошо сжимается минификатором.
В коде это выглядит примерно так:
function on(event, handler, silent= false) {// some func
        /* @ifdef DEBUG */
        checkArgs(arguments, [TYPE_STRING | TYPE_ARRAY, TYPE_FUNCTION, TYPE_BOOLEAN], 2);
        /* @endif */                 
        //Function implementation
    }

Обычно вызовы обрамляю директивой, дабы при желании для production версии Gulp+preproccess можно было собрать версию без runtime проверки аргументов.
on() //TypeError: Function [on] is expecting at least 2 arguments, but 0 were given
on(1,2,3) //TypeError: Function [on] is expecting STRING, ARRAY as 1th argument, but NUMBER, INTEGER given
Так что никто не мешает тоже написать подобное, ну либо ждать меня :)
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
function sum( x, y ) {
    return +x + +y;
}

sum( '5', 6 );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 15:52
3000 руб./за проект
25 нояб. 2024, в 15:43
1500 руб./за проект