Skip to content

object

@movk-repo/shared/types/object

AnyObject

表示一个任意键值对的对象。

ts
export type AnyObject = Record<string, any>

OmitByKey

从类型 T 中排除键 K。

ts
export type OmitByKey<T, K extends keyof T> = {
  [P in keyof T as P extends K ? never : P]: T[P];
}

PickByKey

从类型 T 中挑选键 K。

ts
export type PickByKey<T, K extends keyof T> = {
  [P in keyof T as P extends K ? P : never]: T[P];
}

RenameKeys

重命名类型 T 中的键。

ts
export type RenameKeys<T, Mapping extends { [K in keyof T]?: PropertyKey }> = {
  [K in keyof T as K extends keyof Mapping ? Exclude<Mapping[K], undefined> : K]: T[K];
}

RequiredByKeys

将类型 T 中的键 K 设为必需。

ts
export type RequiredByKeys<T, K extends keyof T> = T & {
  [P in K]-?: T[P];
}

PartialByKeys

将类型 T 中的键 K 设为可选。

ts
export type PartialByKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

ReadonlyByKeys

将类型 T 中的键 K 设为只读。

ts
export type ReadonlyByKeys<T, K extends keyof T> = T & {
  readonly [P in K]: T[P];
}

MutableByKeys

将类型 T 中的键 K 设为可变。

ts
export type MutableByKeys<T, K extends keyof T> = {
  -readonly [P in K]: T[P];
} & Omit<T, K>

UnionToIntersection

将联合类型 U 转换为交叉类型。

ts
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? {
  [K in keyof I]: I[K];
} : never

FirstParam

获取类型 T 中键 K 的第一个参数类型。

ts
export type FirstParam<T, K extends keyof T> = T[K] extends [infer P, ...any[]] ? P : never

FirstParameter

获取函数类型 T 的第一个参数类型。

ts
export type FirstParameter<T> = T extends (arg: infer P, ...args: any[]) => any ? P : undefined

基于 MIT 许可发布