Как первый параметр в функции может быть опциональным?
Наткнулся здесь:
https://developer.mozilla.org/en-US/...tabs/insertCSS У функции два параметра, первый - опциональный int, второй - объект: let inserting = browser.tabs.insertCSS( tabId, // optional integer details // object ) Далее, приводится пример вызова где они передают только объект:
let insertingCSS = browser.tabs.insertCSS({ code: css });
Что здесь вообще происходит? Должно же быть как-то так:
insertCSS(undefined, { code: css })
В JS же нельзя первый параметр пропускать или нет? |
Цитата:
|
Цитата:
test(1, {tmp: 20})
test({test: 'Ok'})
//
function test(v, o) {
if (typeof v === 'object') {
o = v
v = 100
}
console.log(v, o)
}
|
Количество аргументов можно учитывать...
test(1, {tmp: 20})
test({test: 'Ok'})
//
function test(...arg) {
let v = 100
let o = arg[0]
if (arg.length > 1) {
v = arg[0]
o = arg[1]
}
console.log(v, o)
}
|
ksa,
понятно, спасибо! А это нормальная практика делать такие функции/апишки? Они же спокойно могли поменять аргументы местами, а так это вроде как вводит в заблуждение. Там конечно сказано, что параметр опциональный, но не увидев пример, я бы не понял, что его вообще можно опустить. Плюсом они усложнили логику функции на ровном месте. Не говоря о том что они вообще могли tabID запихнуть в объект details, там проблем с чередованием нет вообще. |
Цитата:
Цитата:
Усложнение функции делают для удобства ее использования "конечным" программистам. Это как бы расширяет возможности при использовании функций или методов... :write: |
ksa,
понятно, спасибо за помощь! |
Цитата:
function func(tabId, details) {
if (typeof tabId !== 'number') {
details = tabId;
tabId = undefined;
}
console.log('tabId, details:', tabId, details);
}
чтобы это обрисовать в тайпскрипте, надо будет сделать перегрузку функции:
function func(tabId: number, details: object): void;
function func(details: object): void;
function func(...a: [number, object] | [object]): void {
const [tabId, details] = a.length === 1 ? [undefined, a[0]] : a;
// tabId: number | undefined
// details: object
console.log('tabId, details:', tabId, details);
}
|
Alexandroppolus,
спасибо! |
| Часовой пояс GMT +3, время: 04:48. |