Skip to content

types

公共类型定义。

导入

typescript
import type {
  AnyObject,
  AnyArray,
  AnyFunction,
  AnyAsyncFunction,
  MaybePromise,
  MaybeCallable,
  DeepPartial,
  PrimitiveValue,
  ReferenceValue,
  KeysOf,
  UnionToIntersection,
  UnionToTuple,
  MergeIntersection,
  LowercaseStartString,
  UppercaseStartString,
  IsEmptyObject,
  IsOnlyProperty,
  HasProperty,
  Exact
} from '@cloudcome/utils-core/types'

类型定义

AnyObject

任意对象类型。

typescript
type AnyObject = Record<PropertyKey, unknown>

AnyArray

任意数组类型。

typescript
type AnyArray = Array<unknown>

AnyFunction

任意函数类型。

typescript
type AnyFunction = (...args: any[]) => any

AnyAsyncFunction

任意异步函数类型。

typescript
type AnyAsyncFunction = (...args: any[]) => Promise<any>

MaybePromise<T>

可能为 Promise 的类型。

typescript
type MaybePromise<T> = T | Promise<T>

示例

typescript
function fetchData(): MaybePromise<string> {
  if (useCache) {
    return 'cached data' // 同步返回
  }
  return fetch('/api/data').then(res => res.text()) // 异步返回
}

MaybeCallable<T>

可能为函数的类型。

typescript
type MaybeCallable<T> = T | (() => T)

示例

typescript
function getValue(value: MaybeCallable<string>): string {
  return typeof value === 'function' ? value() : value
}

getValue('hello') // 'hello'
getValue(() => 'hello') // 'hello'

DeepPartial<T>

深度可选类型。

typescript
type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]
}

示例

typescript
interface Config {
  database: {
    host: string
    port: number
  }
  cache: {
    ttl: number
  }
}

// 所有属性都是可选的
const config: DeepPartial<Config> = {
  database: {
    host: 'localhost'
    // port 可选
  }
  // cache 可选
}

PrimitiveValue

原始值类型。

typescript
type PrimitiveValue = string | number | boolean | bigint | symbol | null | undefined | void | never

ReferenceValue

引用值类型。

typescript
type ReferenceValue = object

KeysOf<T>

获取对象的键类型。

typescript
type KeysOf<T> = { [P in keyof T]: P extends string ? P : P extends number ? `${P}` : never }[keyof T]

UnionToIntersection<T>

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

typescript
type UnionToIntersection<T> = (T extends any ? (arg: T) => void : never) extends (arg: infer U) => void ? U : never

UnionToTuple<T>

将联合类型转换为元组类型。

typescript
type UnionToTuple<T> = [T] extends [never] ? [] : [...UnionToTuple<Exclude<T, _UnionLast<T>>>, _UnionLast<T>]

示例

typescript
type T3 = UnionToTuple<'a' | 'b' | 'c' | 'd'>
// ['a', 'b', 'c', 'd']

MergeIntersection<T>

合并交叉类型。

typescript
type MergeIntersection<A> = A extends infer T ? { [Key in keyof T]: T[Key] } : never

LowercaseStartString

首字母小写的字符串类型。

typescript
type LowercaseStartString = `${'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'}${string}`

UppercaseStartString

首字母大写的字符串类型。

typescript
type UppercaseStartString = `${'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'}${string}`

IsEmptyObject<T>

判断是否为空对象类型。

typescript
type IsEmptyObject<T> = keyof T extends never ? true : false

IsOnlyProperty<T, P>

判断对象是否只有一个属性。

typescript
type IsOnlyProperty<T, P> = keyof T extends P ? true : false

示例

typescript
type Result = IsOnlyProperty<{ a: 1 }, 'a'>
// true

type Result2 = IsOnlyProperty<{ a: 1, b: 2 }, 'a'>
// false

HasProperty<T, K>

判断对象是否有指定属性。

typescript
type HasProperty<T, K> = K extends keyof T ? true : false

Exact<T, Shape>

精确类型匹配。

typescript
type Exact<T, Shape> = T extends Shape ? (Exclude<keyof T, keyof Shape> extends never ? T : never) : never

基于 MIT 许可发布