У меня есть функция с переменными аргументами, аналогичной тойфункции переменной подпись/аргументы
function fn(...args) {
let str, arr, obj;
if (args.length == 1) {
if (typeof args[0] == 'object') {
obj = args[0];
} else {
str = args[0];
}
} else if (args.length == 2) {
str = args[0];
if (typeof args[1] == 'object') {
obj = args[1];
} else {
arr = args[1];
}
} else if (args.length == 3) {
[str, arr, obj] = args;
}
}
И API является
fn()
fn(String str)
fn(Object obj)
fn(String str, Array arr)
fn(String str, Object obj)
fn(String str, Array arr, Object obj)
Он намеренно рыхлый по типам (например, некоторые аргументы могут быть неопределенными).
Это код браузера, довольно компактный. Это, безусловно, можно сделать таким образом, но есть ли лучшие рецепты, менее многословные и более удобные в обслуживании? Любой Узел или общие JS-библиотеки, которые могут выполнять грязную работу, сохраняя при этом скромные размеры и зависимости?
Извините, и почему вы считаете это приемлемым вопросом? Он слишком широк. Просто потому, что что-то является вопросом, автоматически не означает, что это разрешено здесь. В 3k rep вы должны знать, какие вопросы сейчас в порядке. –
@JK Каковы ваши личные рекомендации по улучшению вопроса? Я совершенно уверен, что «слишком много возможных ответов или хороших ответов было бы слишком длинным» не так. Хорошие ответы, которые могут мешать мне изобретать колесо, существуют, и их не будет слишком много. – estus
Ничего общего с вопросом, но это не будет работать так, как вы думаете: 'if (typeof args [1] == 'object') { obj = args [1]; } else { arr = args [1]; } ', так как' typeof' Array также является «объектом». – Buzinas