diff --git a/test/types/fetch.test-d.ts b/test/types/fetch.test-d.ts index a4a4ba18d30..5695e89439d 100644 --- a/test/types/fetch.test-d.ts +++ b/test/types/fetch.test-d.ts @@ -178,6 +178,8 @@ expectType>(response.bytes()) expectType>(response.json()) expectType>(response.text()) expectType(response.clone()) +expectAssignable(response) +expectAssignable>(fetch(request)) expectType(new Request('https://example.com', { body: 'Hello, world', duplex: 'half' })) expectAssignable({ duplex: 'half' }) diff --git a/types/fetch.d.ts b/types/fetch.d.ts index ec33e5b2fc1..e663d019994 100644 --- a/types/fetch.d.ts +++ b/types/fetch.d.ts @@ -60,12 +60,32 @@ export interface SpecIterator { next(...args: [] | [TNext]): IteratorResult; } -export interface SpecIterableIterator extends SpecIterator { +export interface SpecIteratorObject extends SpecIterator { + [Symbol.iterator](): SpecIteratorObject; + map(callbackfn: (value: T, index: number) => U): SpecIteratorObject; + filter(predicate: (value: T, index: number) => value is S): SpecIteratorObject; + filter(predicate: (value: T, index: number) => unknown): SpecIteratorObject; + take(limit: number): SpecIteratorObject; + drop(count: number): SpecIteratorObject; + flatMap(callbackfn: (value: T, index: number) => Iterator | Iterable): SpecIteratorObject; + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number) => T): T; + reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number) => T, initialValue: T): T; + reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number) => U, initialValue: U): U; + toArray(): T[]; + forEach(callbackfn: (value: T, index: number) => void): void; + some(predicate: (value: T, index: number) => unknown): boolean; + every(predicate: (value: T, index: number) => unknown): boolean; + find(predicate: (value: T, index: number) => value is S): S | undefined; + find(predicate: (value: T, index: number) => unknown): T | undefined; + readonly [Symbol.toStringTag]: string; +} + +export interface SpecIterableIterator extends SpecIteratorObject { [Symbol.iterator](): SpecIterableIterator; } export interface SpecIterable { - [Symbol.iterator](): SpecIterator; + [Symbol.iterator](): SpecIterableIterator; } export type HeadersInit = [string, string][] | HeaderRecord | Headers diff --git a/types/formdata.d.ts b/types/formdata.d.ts index b9819a7e725..5244e04559f 100644 --- a/types/formdata.d.ts +++ b/types/formdata.d.ts @@ -4,6 +4,12 @@ import { File } from 'node:buffer' import { SpecIterableIterator } from './fetch' +declare module 'node:buffer' { + interface File { + readonly [Symbol.toStringTag]: string + } +} + /** * A `string` or `File` that represents a single value from a set of `FormData` key-value pairs. */