У меня есть коллекция «утилитарных» помощников, инкапсулированных в объект, как показано ниже:
export const QuotationRequestUtils = {
/**
*
* @param {Object} param0
* @param {string} param0.currentView
* @param {string} param0.insuranceType
*
* @returns {string}
*/
getNextView({ currentView, insuranceType }) { return "str" },
/**
*
* @param {Object} param0
* @param {number} param0.this
* @param {string} param0.that
*
* @returns {number}
*/
getSomething({ this, that }) { return 2 }
}
Это хорошо работает в следующем:
- Вызов
QuotationRequestUtils.getNextView
делает утверждения о аргументы и возвращаемые типы - В среде IDE предлагаются предложения о том, какие вспомогательные функции доступны при вводе.
Но с этой настройкой я не могу ограничить тип QuotationRequestUtils
, чтобы иметь исправлен набор методов. То есть, если я вызываю QuotationRequestUtils.getAbc()
(метод, который не существует в Util), я не получаю сообщение об ошибке.
В качестве альтернативы я попытался
/**
*
* @typedef {Object} QuotationRequestUtils
* @property {function({currentView: string, insuranceType: string}): string} getNextView
* @property {function({this: number, that: string}): number} getSomething
*
*/
/**@type {QuotationRequestUtils} */
export const QuotationRequestUtils = {
/**
*
* @param {Object} param0
* @param {string} param0.currentView
* @param {string} param0.insuranceType
*
* @returns {string}
*/
getNextView({ currentView, insuranceType }) { return "str" },
/**
*
* @param {Object} param0
* @param {number} param0.this
* @param {string} param0.that
*
* @returns {number}
*/
getSomething({ this, that }) { return 2 }
}
Это помогает ограничить QuotationRequestUtils
наличием фиксированного набора помощников, но:
- Не удобно документировать сигнатуры функций в одной строке
- Документы над каждой вспомогательной функцией: больше не используется (то есть, если я удаляю сигнатуру функции из
typedef
, утверждения arg больше не делаются) - IDE предлагает их как
properties
, а не methods
- не большая проблема, но раздражение
Какой лучший способ go об этом?