JavaScript — один из самых быстрорастущих языков программирования, который выбирают чаще всего, когда дело доходит до веб-разработки — хотя это утверждение верно, многие могут возразить. Тем не менее, JavaScript все еще не стабилизированный язык, и многие недостающие функции еще предстоит реализовать. В нынешнем климате JavaScript с новым синтаксисом, функциями и использованием множества внешних библиотек кажется труднее, чем когда-либо, быть уверенным, что ваши функции получают или даже что представляют данные. Мы придумали Flow и TypeScript, чтобы помочь JavaScript, но можем ли мы рассчитывать на то, что они всегда будут доступны? — простой ответ был бы нет. Вот почему мне нравится проводить собственное обнаружение с помощью JavaScript, особенно когда речь идет о типах функций.

const simpleFunction = () => {}
simpleFunction.constructor.name // "Function"

Чтобы обнаружить асинхронную функцию:

const simpleAsyncFunction = async () => {}
simpleAsyncFunction.constructor.name // "AsyncFunction"

Чтобы определить функцию генератора:

function* generatorFunction() {}
generatorFunction.constructor.name // "GeneratorFunction"

Чтобы определить функцию генератора:

async function* generatorAsyncFunction() {}
generatorAsyncFunction.constructor.name // "AsyncGeneratorFunction"

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