类型工具
本页介绍 @quiteer/utils 中提供的常用 TypeScript 类型工具与相关辅助函数。
常用类型
DeepPartial<T>:将对象所有属性递归设为可选DeepRequired<T>:将对象所有属性递归设为必填RequiredKeys<T>/OptionalKeys<T>:获取必填/可选键集合ValueOf<T>:提取对象值的联合类型UnionToIntersection<U>:联合转交叉ReadonlyDeep<T>/Mutable<T>:递归只读/去只读Exact<T, U>:确保U没有T之外的多余属性KeysOfType<T, V>/PickByValue<T, V>/OmitByValue<T, V>:按值类型选择/排除键Nullable<T>/NullableDeep<T>:属性变为可空(递归)Primitive/JSONValue:原始类型与可序列化 JSON 类型Brand<T, B>:品牌类型,为基本类型打标识IfEquals<X, Y, A, B>/IsAny<T>/IsNever<T>:条件与类型判别TupleToUnion<T>/UnionToTuple<U>:元组与联合互转(简化)Overwrite<T, U>/Merge<T, U>/Expand<T>:对象类型覆盖、合并、展开显示
示例:结果类型模式
以下为推荐的结果类型用法示例,便于在工程中统一返回结构(库未内置该类型)。
使用示例
ts
import type {
Brand,
DeepPartial,
DeepRequired,
Exact,
Expand,
IfEquals,
IsAny,
IsNever,
JSONValue,
KeysOfType,
Merge,
Mutable,
Nullable,
NullableDeep,
OmitByValue,
Overwrite,
PickByValue,
Primitive,
ReadonlyDeep,
RequiredKeys,
TupleToUnion,
UnionToIntersection,
UnionToTuple,
ValueOf
} from '@quiteer/utils'
// 函数:使用 DeepPartial
// 作用:对配置进行增量更新
interface Config { a: number, nested: { x: number, y?: number } }
const patch: DeepPartial<Config> = { nested: { y: 2 } }
// 函数:Exact 确保无多余属性
// 作用:约束对象必须精确匹配目标结构
interface User { id: number, name: string }
const u: Exact<User, { id: number, name: string }> = { id: 1, name: 'A' }
// 函数:按值类型挑选键
// 作用:仅保留值类型为 string 的键
interface T { a: string, b: number, c: string }
type OnlyStringKeys = KeysOfType<T, string> // 'a' | 'c'
type OnlyString = PickByValue<T, string> // { a: string, c: string }
// 函数:统一结果类型
// 作用:明确成功或失败分支(推荐自定义在项目中复用)
type Result<T, E = Error> = { ok: true, value: T } | { ok: false, error: E }
function parseToInt(v: string): Result<number> {
const n = Number.parseInt(v, 10)
return Number.isFinite(n)
? { ok: true, value: n }
: { ok: false, error: new Error('NaN') }
}
// 函数:Brand 为 ID 打品牌
// 作用:避免不同 ID 混用
type UserId = Brand<number, 'UserId'>
function loadUser(id: UserId) {
return { id, name: 'someone' }
}更多类型可在编辑器中直接查看提示;也可在源码 packages/utils/src/type-utils.ts 浏览完整定义。