const ListItemsTemplate = await screen.findByTestId("ListItemsTemplate"); expect(ListItemsTemplate).toBeInTheDocument();
const clipsAudioItems = await screen.findAllByTestId("clips/audioItem"); expect(clipsAudioItems.length).toBe(5);
type BaseColumn = { label: string; props: string };
type Column = { type?: 'text' } & BaseColumn;
type LinkColumn = { type: 'link'; path: string } & BaseColumn;
type TableColumn = Column | LinkColumn;
const fn = <T extends TableColumn['type'] = 'text'>({
type,
...rest
}: Partial<Record<'type', T>> & TableColumn) => {};
fn({ type: 'text', label: '', props: '' });
fn({ type: 'link', label: '', props: '', path: '' });
fn({ label: '', props: '' });
fn({ label: '', props: '', path: '' }); // error
type Column = { label: string; props: string };
type LinkColumn = { type: 'link'; path: string } & Column;
type OmitObjectsKeys<T, GObjects extends unknown[]> = GObjects extends [
infer GObject0,
...infer GObjectsRest,
]
? OmitObjectsKeys<
T & { [Key in keyof GObject0 as Key extends keyof T ? never : Key]?: never },
GObjectsRest
>
: T;
type OmitEachOther<
GObjects extends unknown[],
GPrevObjects extends unknown[] = [],
> = GObjects extends [infer GObject0, ...infer GObjectsRest]
?
| OmitObjectsKeys<GObject0, [...GPrevObjects, ...GObjectsRest]>
| OmitEachOther<GObjectsRest, [...GPrevObjects, GObject0]>
: never;
type TableColumn = OmitEachOther<[Column, LinkColumn]>;
__tests__
на том же уровне, что и тестируемый файл. Локальные моки там же, глобальные для пекеджей согласно документации библиотеки для тестирования, а свои глобальные уже смотреть надо, в фсд можно в шейрд запихнуть.