Skip to content

PrimitiveType

基本类型,由numberstringbooleanundefinednullbigintsymbol组成。

Added in v0.0.1

Source

typescript
export type PrimitiveType =
  | undefined
  | null
  | number
  | string
  | boolean
  | bigint
  | symbol

NumberString

由数字组成的字符串。

Added in v0.0.1

Source

typescript
export type NumberString = `${number}`

ObjectLike

非函数对象。

Added in v0.0.1

Source

typescript
export type ObjectLike = object & { call?: never; [x: PropertyKey]: any }

ExtractUnion

从元组中提取联合类型。

Added in v0.0.1

Source

typescript
export type ExtractUnion<T extends readonly string[]> = {
  [K in keyof T]: T[K]
}[number]

KeyOrIndex

从形如 [${number}] 或 ${number} 的字符串中提取数字。其他情况则返回原始字符串。

Added in v0.0.1

Source

typescript
export type KeyOrIndex<T extends string> = T extends
  | `[${infer D extends number}]`
  | `${infer D extends number}`
  ? D
  : T

Tail

获取元组类型最后一个元素。

Added in v0.0.1

Source

typescript
export type Tail<T extends readonly any[]> = T extends readonly [
  ...any[],
  infer L
]
  ? L
  : never

Head

获取元组类型第一个元素。

Added in v0.0.1

Source

typescript
export type Head<T extends readonly any[]> = T extends readonly [
  infer L,
  ...any[]
]
  ? L
  : never

Edge

获取元组T首端或者末端的元素,由类型D决定。

Added in v0.0.1

Source

typescript
export type Edge<
  T extends readonly any[],
  D = 'left' | 'right'
> = D extends 'left' ? Head<T> : Tail<T>

EdgeReverse

Edge类似,但是D取值'left'或者'right'时效果反过来。

Added in v0.0.1

Source

typescript
export type EdgeReverse<
  T extends readonly any[],
  D = 'left' | 'right'
> = D extends 'right' ? Head<T> : Tail<T>

EmptyOrParameters

返回函数的参数值类型,若非函数返回never[]类型。

Added in v0.0.1

Source

typescript
export type EmptyOrParameters<T> = T extends (...args: any[]) => any
  ? Parameters<T>
  : never[]

EmptyOrReturnType

返回函数的返回值类型,若非函数返回void类型。

Added in v0.0.1

Source

typescript
export type EmptyOrReturnType<T> = T extends (...args: any[]) => any
  ? ReturnType<T>
  : void

WithFallback

返回函数 T 的返回值类型,如果是 null 或者 undefined 则返回默认值类型 R

Added in v0.0.2

Source

typescript
export type WithFallback<T extends (...args: any[]) => any, R> =
  ReturnType<T> extends undefined | null ? R : ReturnType<T>

LiteralStringWithFallback

当字符串类型 T 太宽泛(例如 string)时,此类型会提供一个默认字符串值 R

它可以确保类型安全,在给配置对象或者可选参数设置默认值时非常有用。

Added in v0.0.2

Source

typescript
export type LiteralStringWithFallback<T extends string, R extends string> = T &
  R extends never
  ? T
  : R

MappedTypeByKeyOrIndex

根据输入的字符串或数字索引 T 来生成普通对象或数组类型,该索引指向类型 V,类型 O 控制值是否可选。

Added in v0.0.2

Source

typescript
export type MappedTypeByKeyOrIndex<
  T extends string,
  V,
  O extends boolean = false
> =
  KeyOrIndex<T> extends string
    ? O extends false
      ? { [P in T]: V }
      : { [P in T]?: V }
    : O extends false
      ? unknown[] & { [P in KeyOrIndex<T>]: V }
      : unknown[] & { [P in KeyOrIndex<T>]?: V }

DeepMappedTypeByKeyOrIndex

递归地解析字段路径 T 并创建嵌套普通对象或数组,它可以解析类似 "data.[0].name" 这样的嵌套路径字符串,路径末端的字段指向值 VO 控制值是否可选。

在基于字符串模板创建复杂的嵌套类型时非常有用。

Added in v0.0.2

Source

typescript
export type DeepMappedTypeByKeyOrIndex<
  T extends string,
  V,
  O extends boolean = false
> = T extends `[${infer Key extends number}][${infer Rest}`
  ? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<`[${Rest}`, V>>
  : T extends `${infer Key}[${infer Rest}`
    ? MappedTypeByKeyOrIndex<
        `${Key}`,
        DeepMappedTypeByKeyOrIndex<`[${Rest}`, V>
      >
    : T extends `[${infer Key extends number}].${infer Rest}`
      ? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<Rest, V>>
      : T extends `${infer Key}.${infer Rest}`
        ? MappedTypeByKeyOrIndex<`${Key}`, DeepMappedTypeByKeyOrIndex<Rest, V>>
        : MappedTypeByKeyOrIndex<T, V, O>

DataUnit

DataUnit 类型表示数据大小的不同单位。

Added in v0.0.2

Source

typescript
export type DataUnit =
  | 'bit'
  | 'B'
  | 'KB'
  | 'MB'
  | 'GB'
  | 'TB'
  | 'PB'
  | 'EB'
  | 'ZB'
  | 'YB'