///
declare module '*.module.css' {
const classes: { readonly [key: string]: string }
export default classes
}
declare module '*.module.scss' {
const classes: { readonly [key: string]: string }
export default classes
}
declare module uxcale {
declare type ApiResult = {
data: TData
}
declare type PaginatedApiResult = ApiResult<
TResource[]
> & {
pagination: {
pageSize: number
pageNumber: number
totalPages: number
totalElements: number
}
}
}
declare type EmptyObject = Record
/**
* Opaque
* @desc Declares an Opaque type
* @see https://dev.to/stereobooster/pragmatic-types-opaque-types-and-how-they-could-have-saved-mars-climate-orbiter-1551
* @example
* // Expect: "string | null"
* NonUndefined;
*/
declare type Opaque = T & { __TYPE__: K }
/**
* NonUndefined
* @desc Exclude undefined from set `A`
* @example
* // Expect: "string | null"
* NonUndefined;
*/
declare type NonUndefined = A extends undefined ? never : A
/**
* FunctionKeys
* @desc Get union type of keys that are functions in object type `T`
* @example
* type MixedProps = {name: string; setName: (name: string) => void; someKeys?: string; someFn?: (...args: any) => any;};
*
* // Expect: "setName | someFn"
* type Keys = FunctionKeys;
*/
declare type FunctionKeys = {
[K in keyof T]-?: NonUndefined extends Function ? K : never
}[keyof T]
/**
* NonFunctionKeys
* @desc Get union type of keys that are non-functions in object type `T`
* @example
* type MixedProps = {name: string; setName: (name: string) => void; someKeys?: string; someFn?: (...args: any) => any;};
*
* // Expect: "name | someKey"
* type Keys = NonFunctionKeys;
*/
declare type NonFunctionKeys = {
[K in keyof T]-?: NonUndefined extends Function ? never : K
}[keyof T]
/**
* RequiredKeys
* @desc Get union type of keys that are required in object type `T`
* @see https://stackoverflow.com/questions/52984808/is-there-a-way-to-get-all-required-properties-of-a-typescript-object
* @example
* type Props = { req: number; reqUndef: number | undefined; opt?: string; optUndef?: number | undefined; };
*
* // Expect: "req" | "reqUndef"
* type Keys = RequiredKeys;
*/
declare type RequiredKeys = {
[K in keyof T]-?: {} extends Pick ? never : K
}[keyof T]
/**
* OptionalKeys
* @desc Get union type of keys that are optional in object type `T`
* @see https://stackoverflow.com/questions/52984808/is-there-a-way-to-get-all-required-properties-of-a-typescript-object
* @example
* type Props = { req: number; reqUndef: number | undefined; opt?: string; optUndef?: number | undefined; };
*
* // Expect: "opt" | "optUndef"
* type Keys = OptionalKeys;
*/
declare type OptionalKeys = {
[K in keyof T]-?: {} extends Pick ? K : never
}[keyof T]
/**
* PromiseType
* @desc Obtain Promise resolve type
* @example
* // Expect: string;
* type Response = PromiseType>;
*/
declare type PromiseType> = T extends Promise
? U
: never
/**
* WithOptional
* @desc From `T` make a set of properties by key `K` become optional
* @example
* type Props = {
* name: string;
* age: number;
* visible: boolean;
* };
*
* // Expect: { name?: string; age?: number; visible?: boolean; }
* type Props = WithOptional;
*
* // Expect: { name: string; age?: number; visible?: boolean; }
* type Props = WithOptional;
*/
declare type WithOptional = Omit &
Partial>
/**
* WithRequired
* @desc From `T` make a set of properties by key `K` become required
* @example
* type Props = {
* name?: string;
* age?: number;
* visible?: boolean;
* };
*
* // Expect: { name: string; age: number; visible: boolean; }
* type Props = WithRequired;
*
* // Expect: { name?: string; age: number; visible: boolean; }
* type Props = WithRequired;
*/
declare type WithRequired = Omit &
Required>
/**
* FirstParam
* @desc From a function `T` get the first parameter type
* @example
* type Props = {
* name: string;
* age: number;
* visible: boolean;
* };
*
* // Expect: { name?: string; age?: number; visible?: boolean; }
* type Props = WithOptional;
*
* // Expect: { name: string; age?: number; visible?: boolean; }
* type Props = WithOptional;
*/
declare type FirstParam any> = Parameters[0]