/// 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]