Как первый параметр в функции может быть опциональным?
Наткнулся здесь:
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); } |
Часовой пояс GMT +3, время: 08:23. |