Есть ли способ сообщить функции javascript, что определенный параметр имеет определенный тип?
Быть способным сделать что-то подобное было бы идеально:
function myFunction(Date myDate, String myString)
{
//do stuff
}
Спасибо!
Обновление : поскольку ответом является громкое «нет», если я хочу, myDate
чтобы его считали датой (чтобы вызывать для него функции даты), я должен преобразовать его как дату внутри функции или установить новую переменную Тип даты к нему?
Date
, толькоobject
.Date
это функция. Посмотрите на stackoverflow.com/questions/1646698/… чтобы узнать больше оnew
ключевом слове JavaScript . Кроме того, поскольку нет классов, нет кастинга. Вы можете просто вызвать функции, которые вы хотите. Если объект содержит их, они будут работать, в противном случае вы получите ошибку.Ответы:
Нет, JavaScript не является статически типизированным языком. Иногда вам может потребоваться вручную проверить типы параметров в теле функции.
источник
instanceof
иtypeof
ключевые слова , чтобы помочь в этом. Хотя для этого требуется больше кода, возможно, именно разработчик выбрал JavaScript в качестве языка для чего-то, что в значительной степени зависит от типов. Что касается огромных серверных приложений nodejs? Я думаю, что это должно быть здравым смыслом.Не в javascript, а в расширенном режиме компилятора Google вы можете сделать это:
См. Http://code.google.com/closure/compiler/docs/js-for-compiler.html.
источник
foo( /*MyType*/ param )
как описанный здесь способ также работает: stackoverflow.com/a/31420719/1915920Хотя вы не можете сообщить языку JavaScript о типах, вы можете сообщить в IDE о них, так что вы получите гораздо более полезное автозаполнение.
Вот два способа сделать это:
Используйте JSDoc , систему для документирования кода JavaScript в комментариях. В частности, вам понадобится
@param
директива :Вы также можете использовать JSDoc для определения пользовательских типов и указывать их в
@param
директивах, но обратите внимание, что JSDoc не будет выполнять никакой проверки типов; это всего лишь инструмент документации. Чтобы проверить типы, определенные в JSDoc, посмотрите на TypeScript , который может анализировать теги JSDoc .Используйте подсказку типа, указав тип непосредственно перед параметром в
/* comment */
:Это довольно распространенная техника, используемая , например, ReactJS . Очень удобно для параметров обратных вызовов, передаваемых сторонним библиотекам.
Машинопись
Для фактической проверки типов наиболее близким решением является использование TypeScript, (в основном ) расширенного набора JavaScript. Вот TypeScript через 5 минут .
источник
VSCode
?vi
редактор, которым злоупотребляют, а не IDE. Вы можете делать много чегоvi
, так же, как вы можете делать музыкальные клипы в Excel . Отличная идея? Возможно нет. Используйте правильный инструмент для работы.Ознакомьтесь с новой библиотекой Flow от Facebook, «средство проверки статического типа, предназначенное для поиска ошибок типов в программах JavaScript»
Определение:
Тип проверки:
И вот как это запустить .
источник
Нет, вместо этого вам нужно будет сделать что-то вроде этого в зависимости от ваших потребностей:
источник
Вы можете реализовать систему, которая обрабатывает проверки типов автоматически , используя оболочку в вашей функции.
Следующая реализация иллюстрирует основную идею в упрощенном, но оперативном виде :
источник
Изменить: семь лет спустя, этот ответ все еще получает случайные отзывы. Хорошо, если вы ищете проверку во время выполнения, но я бы сейчас порекомендовал проверку типов во время компиляции с использованием Typescript или, возможно, Flow. См. Https://stackoverflow.com/a/31420719/610585 выше для получения дополнительной информации.
Оригинальный ответ:
Это не встроено в язык, но вы можете сделать это самостоятельно довольно легко. Ответ Вибху - это то, что я считаю типичным способом проверки типов в Javascript. Если вы хотите что-то более обобщенное, попробуйте что-то вроде этого: (просто пример, чтобы вы начали)
источник
Это легко сделать с помощью ArgueJS :
источник
Используйте
typeof
илиinstanceof
:источник
Может быть, вспомогательная функция, как это. Но если вы видите, что регулярно используете такой синтаксис, вам, вероятно, следует переключиться на Typescript.
источник
Я тоже об этом думал. Из фона C вы можете моделировать типы кодов возврата функций, а также типы параметров, используя что-то вроде следующего:
Число перед вызывающей функцией возвращает тип Number независимо от типа возвращаемого фактического значения, как показано во втором вызове, где typeof rc = число, но значение равно NaN
console.log для вышеупомянутого:
источник
TypeScript - одно из лучших решений на данный момент
https://www.typescriptlang.org/
источник