import type { NonUndefined } from '@/type/utils'; /** * 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; */ export 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; */ export type NonFunctionKeys = { [K in keyof T]-?: NonUndefined extends Function ? never : K; }[keyof T]; export { DeepReadonly } from './readonly'; export { Diff } from './diff'; export { PickByType } from './pick-by-type'; export { OmitByType } from './omit-by-type'; export { ValuesType } from './value-types';