Type Alias IterableElement<TargetIterable>

IterableElement: TargetIterable extends Iterable<infer ElementType>
    ? ElementType
    : TargetIterable extends AsyncIterable<infer ElementType>
        ? ElementType
        : never

Get the element type of an Iterable/AsyncIterable. For example, an array or a generator.

This can be useful, for example, if you want to get the type that is yielded in a generator function. Often the return type of those functions are not specified.

This type works with both Iterables and AsyncIterables, so it can be use with synchronous and asynchronous generators.

Here is an example of IterableElement in action with a generator function:

Type Parameters

  • TargetIterable
import type {IterableElement} from 'type-fest';

function * iAmGenerator() {
yield 1;
yield 2;
}

type MeNumber = IterableElement<ReturnType<typeof iAmGenerator>>

And here is an example with an async generator:

import type {IterableElement} from 'type-fest';

async function * iAmGeneratorAsync() {
yield 'hi';
yield true;
}

type MeStringOrBoolean = IterableElement<ReturnType<typeof iAmGeneratorAsync>>

Many types in JavaScript/TypeScript are iterables. This type works on all types that implement those interfaces. For example, Array, Set, Map, stream.Readable, etc.

An example with an array of strings:

import type {IterableElement} from 'type-fest';

type MeString = IterableElement<string[]>