fetch принимает два параметра и они могут дублировать друг друга?
declare function fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
Если верить декларации fetch он принимает первым аргументом переменную с типом RequestInfo, а вторым RequestInit, если мы загланем в опеределение типа RequestInfo, то мы увидим:
type RequestInfo = Request | string;
Капнув еще глубже мы увидим что Request выглядит так:
declare var Request: {
prototype: Request;
new(input: RequestInfo, init?: RequestInit): Request;
};
И эта информация вводит меня в ступор, получается что изходя из типизации мы можем записать fetch следующим образом (условно):
fetch(Request(input: RequestInfo, init: RequestInit): Request, init: RequestInit)
где init будет одним и тем же значением, собственно это подтверждает документация.
In our Fetch Request with init example (see Fetch Request init live) we do the same thing except that we pass in an init object when we invoke fetch():
var myImage = document.querySelector('img'); var myHeaders = new Headers(); myHeaders.append('Content-Type', 'image/jpeg'); var myInit = { method: 'GET', headers: myHeaders, mode: 'cors', cache: 'default' }; var myRequest = new Request('flowers.jpg',myInit); fetch(myRequest).then(function(response) { ... });Note that you could also pass the init object into the fetch call to get the same effect, e.g.:
fetch(myRequest,myInit).then(function(response) { ... });
Могли бы вы на примерах или доходчиво (пожалуйста без ссылок на спецификацию) объяснить в чем смысл такого API и причины почему это реализовано именно так (возможно ваши соображения или ссылки же тут допустимы ссылки на спецификацию).