type-fest/test-d/iterable-element.ts
Mateusz Kadlubowski 0e4675599d
IterableElement: Improve docs and add tests for using it with Set (#894)
Co-authored-by: Sindre Sorhus <sindresorhus@gmail.com>
2024-06-22 12:01:50 +02:00

41 lines
1.1 KiB
TypeScript

import {expectAssignable, expectType} from 'tsd';
import type {IterableElement} from '../index';
declare const iterableElement: IterableElement<ReturnType<typeof secretGenerator>>;
expectType<1 | 'two'>(iterableElement);
declare const iterableElementAsync: IterableElement<ReturnType<typeof secretGeneratorAsync>>;
expectType<true | Date>(iterableElementAsync);
function * secretGenerator() {
yield 1;
yield 'two';
}
async function * secretGeneratorAsync() {
yield true;
yield new Date();
}
const fruits = new Set(['🍎', '🍌', '🍉'] as const);
type Fruit = IterableElement<typeof fruits>;
expectAssignable<Fruit>('🍎');
expectAssignable<Fruit>('🍌');
expectAssignable<Fruit>('🍉');
type VegetableSet = Set<'🥦' | '🥕' | '🌶'>;
type Vegetable = IterableElement<VegetableSet>;
expectAssignable<Vegetable>('🥦');
expectAssignable<Vegetable>('🥕');
expectAssignable<Vegetable>('🌶');
type UserRolesSet = ReadonlySet<'regular' | 'contributor' | 'maintainer'>;
type UserRole = IterableElement<UserRolesSet>;
expectAssignable<UserRole>('regular');
expectAssignable<UserRole>('contributor');
expectAssignable<UserRole>('maintainer');