ngx-matomo-client
Version:
Matomo (fka. Piwik) client for Angular applications
21 lines (20 loc) • 899 B
TypeScript
/** Extract from a type T all getter-like method keys, optionally filtered by those returning type U */
export type Getters<T, U = any> = keyof T & {
[P in keyof T]: T[P] extends () => U ? P : never;
}[keyof T];
/** Extract all methods from a type T */
export type Methods<T> = keyof T & {
[P in keyof T]: T[P] extends (...args: any[]) => any ? P : never;
}[keyof T];
export type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>;
}[keyof T];
export type NonEmptyArray<T> = [T, ...T[]];
export type NonEmptyReadonlyArray<T> = Readonly<NonEmptyArray<T>>;
export type PublicInterface<T> = {
[K in keyof T]: T[K];
};
export type Prefixed<S, PREFIX extends string> = S extends string ? `${PREFIX}${S}` : never;
export type PrefixedType<MATOMO, PREFIX extends string> = {
[K in keyof MATOMO as Prefixed<K, PREFIX>]: MATOMO[K];
};