Dev Highlights

Доки по разработке

This project is maintained by teniryte

Построение условных утилит

Принципы

Пример

type RemoveFromUnion<T, K> = T extends K ? never : T;
type ExcludeKeys<T, K extends keyof T> = {
  [P in K]: T[P];
};

type NullableProps<T> = {
  [P in keyof T]: T[P] extends null | undefined ? P : never;
}[keyof T];

type ReturnTypeAsync<T extends (...args: any) => any> = T extends (
  ...args: any
) => Promise<infer R>
  ? R
  : T extends (...args: any) => infer R
  ? R
  : any;

async function fetchUser(userId: number) {
  return { email: 'mail@example.com', password: 'secret' };
}

type User = ReturnTypeAsync<typeof fetchUser>; // { email: string; password: string; }

Практика