ts-essentials
所有必备的 TypeScript 类型集于一处 🤙
安装
npm install --save-dev ts-essentials
👉 我们需要 typescript>=4.5
。如果你需要支持旧版本的 TS,请查看TypeScript 依赖表
👉 由于我们希望类型更加严格,我们要求在你的项目中启用 strictNullChecks
API
ts-essentials
是一组高质量、实用的 TypeScript 类型,可以让编写类型安全的代码变得更加容易。
基础类型
Builtin
- 匹配原始类型、函数、日期、错误或正则表达式KeyofBase
-keyofStringsOnly
兼容的PropertyKey
替代品Prettify<Type>
- 扁平化类型并使其在 IDE 悬停时更易读Primitive
- 匹配任何原始值StrictExclude<UnionType, ExcludedMembers>
- 通过从UnionType
中排除所有可分配给ExcludedMembers
的联合成员来构造类型。这是Exclude
的更严格版本StrictExtract<Type, Union>
- 通过从Type
中提取所有可分配给Union
的联合成员来构造类型。这是Extract
的更严格版本StrictOmit<Type, Keys>
- 通过从Type
中选取所有属性然后移除Keys
来构造类型。这是Omit
的更严格版本Writable<Type>
- 构造一个类型,移除Type
所有属性的readonly
,意味着构造类型的属性可以被重新赋值
实用类型
AsyncOrSync<Type>
- 构造一个Type
或PromiseLike<Type>
的类型AsyncOrSyncType<Type>
- 解包AsyncOrSync
类型Dictionary<Type, Keys?>
- 构造一个必需的对象类型,其属性键为Keys
(默认为string
),属性值为Type
Merge<Object1, Object2>
- 通过选取Object1
和Object2
的所有属性来构造类型。当属性键相同时,Object2
的属性值会覆盖Object1
的属性值MergeN<Tuple>
- 通过递归地使用Merge
类型合并元组Tuple
中的对象来构造类型Newable<ReturnType>
- 构造一个类类型,其构造函数的返回类型为ReturnType
NonNever<Type>
- 通过选取Type
中所有值不等于never
的属性来构造类型OmitProperties<Type, Value>
- 通过选取Type
中所有属性并移除值等于Value
的那些属性来构造类型Opaque<Type, Token>
- 构造一个类型,它是Type
的子集,带有指定的唯一标记Token
PathValue<Type, Path>
- 为类型Type
和路径Path
构造路径值Paths<Type>
- 通过选取类型Type
的所有可能路径来构造联合类型PickProperties<Type, Value>
- 通过选取Type
中所有值等于Value
的属性来构造类型SafeDictionary<Type, Keys?>
- 构造一个可选的对象类型,其属性键为Keys
(默认为string
),属性值为Type
UnionToIntersection<Union>
- 从联合类型Union
构造交叉类型ValueOf<Type>
- 为类型Type
构造一个类型,对于原始类型等于原始值,对于数组等于数组元素,对于函数等于函数返回类型,对于对象等于对象属性值XOR<Type1, Type2, Type3?, ..., Type50?>
- 构造一个类型,它可以分配给Type1
或Type2
,但不能同时分配给两者。从 ts-essentials@10 开始,它支持最多 50 个泛型类型。
标记包装类型
MarkOptional<Type, Keys>
- 通过选取Type
中的所有属性来构造类型,其中Keys
属性被设置为可选,意味着它们不是必需的MarkReadonly<Type, Keys>
- 通过选取Type
中的所有属性来构造类型,其中Keys
属性被设置为readonly
,意味着它们不能被重新赋值MarkRequired<Type, Keys>
- 通过选取Type
中的所有属性来构造类型,其中Keys
属性被设置为必需MarkWritable<Type, Keys>
- 通过选取Type
中的所有属性来构造类型,其中Keys
属性移除readonly
修饰符,意味着它们可以被重新赋值
深度包装类型
Buildable<Type>
- 通过结合DeepPartial
和DeepWritable
构造一个类型,意味着来自Type
类型的所有属性都被递归地设置为非readonly
和可选的,即它们可以被重新赋值且不是必需的DeepNonNullable<Type>
- 通过递归地从Type
类型中选择所有属性并从所有属性中排除null
和undefined
值来构造一个类型。要在一个层级上使属性非空,请使用NonNullable<Type>
DeepNullable<Type>
- 通过递归地从Type
类型中选择所有属性并为所有属性包含null
值来构造一个类型DeepOmit<Type, Filter>
- 通过从Type
类型中选择所有属性并移除在Filter
类型中值为never
或true
的属性来构造一个类型。如果您希望Filter
类型根据Type
的结构进行验证,请使用StrictDeepOmit<Type, Filter>
。DeepPartial<Type>
- 通过递归地从Type
类型中选择所有属性并将它们设置为可选来构造一个类型,意味着它们不是必需的。要在一个层级上使属性可选,请使用Partial<Type>
DeepPick<Type, Filter>
- 通过从Type
类型中选择一组在Filter
类型中属性值为never
或true
的属性来构造一个类型。如果您希望Filter
类型根据Type
的结构进行验证,请使用StrictDeepPick<Type, Filter>
。DeepReadonly<Type>
- 通过递归地从Type
类型中选择所有属性并设置readonly
修饰符来构造一个类型,意味着它们不能被重新赋值。要在一个层级上使属性readonly
,请使用Readonly<Type>
DeepRequired<Type>
- 通过递归地从Type
类型中选择所有属性并将其设置为必需来构造一个类型。要在一个层级上使属性必需,请使用Required<Type>
DeepUndefinable<Type>
- 通过递归地从Type
类型中选择所有属性并为所有属性包含undefined
值来构造一个类型DeepWritable<Type>
- 通过递归地从Type
类型中选择所有属性并移除readonly
修饰符来构造一个类型,意味着它们可以被重新赋值。要在一个层级上使属性可写,请使用Writable<Type>
StrictDeepOmit<Type, Filter>
- 通过从Type
类型中选择所有属性并移除在Filter
类型中值为never
或true
的属性来构造一个类型。Filter
类型根据Type
的结构进行验证。StrictDeepPick<Type, Filter>
- 通过从Type
类型中选择一组在Filter
类型中属性值为never
或true
的属性来构造一个类型。Filter
类型根据Type
的结构进行验证。
关键类型
OptionalKeys<Type>
- 通过选择对象类型Type
的所有可选属性构造一个联合类型PickKeys<Type, Value>
- 通过选择对象类型Type
中所有可赋值给类型Value
的属性构造一个联合类型ReadonlyKeys<Type>
- 通过选择对象类型Type
的所有readonly
属性构造一个联合类型,意味着它们的值不能被重新赋值RequiredKeys<Type>
- 通过选择对象类型Type
的所有必需属性构造一个联合类型WritableKeys<Type>
- 通过选择对象类型Type
的所有可写属性构造一个联合类型,意味着它们的值可以被重新赋值
类型检查器
Exact<Type, Shape>
- 当类型Type
和Shape
完全相同时返回Type
。否则返回never
IsAny<Type>
- 当类型Type
为any
时返回true
。否则返回false
IsNever<Type>
- 当类型Type
为never
时返回true
。否则返回false
IsUnknown<Type>
- 当类型Type
为unknown
时返回true
。否则返回false
IsTuple<Type>
- 当类型Type
为元组时返回Type
。否则返回never
NonEmptyObject<Object>
- 当Object
至少有一个键时返回Object
。否则返回never
数组和元组
AnyArray<Type?>
- 匹配Array
或ReadonlyArray
(默认Type
为any
)ArrayOrSingle<Type>
- 匹配Type
或Type[]
ElementOf<Type>
- 构造一个等于类型Type
的数组元素类型的类型Head<Type>
- 构造一个等于类型Type
中第一个元素的类型NonEmptyArray<Type>
- 匹配至少有一个Type
类型元素的数组ReadonlyArrayOrSingle
- 匹配Type
或readonly Type[]
Tail<Type>
- 构造一个等于类型Type
中除第一个元素外的所有元素的类型Tuple<Type?>
- 匹配元组的类型约束,元素类型为Type
(默认为any
)
更改大小写
CamelCase<Type>
- 将类型Type
转换为驼峰式(例如camelCase
)DeepCamelCaseProperties<Type>
- 通过递归地从类型Type
中选择所有属性并将它们全部转换为驼峰式来构造一个类型
函数类型
AnyFunction<Args?, ReturnType?>
- 匹配参数类型为Args
(默认为any[]
)和返回类型为ReturnType
(默认为any
)的函数类型PredicateFunction
- 匹配类型守卫的类型约束,意味着第一个参数用于返回类型,且返回类型是类型谓词PredicateType<Type>
- 构造一个等于谓词函数Type
中缩小类型的类型
实用函数
⚠️ 确保您将 ts-essentials
添加到 dependencies
中(npm install --save ts-essentials
)以避免运行时错误
new UnreachableCaseError(value)
- 匹配运行时类实例类型,帮助检查value
的穷尽性。当value
不是never
时,它会显示 TypeScript 错误assert(condition, message?)
- 匹配运行时函数,帮助断言condition
。当condition
为假时,它会抛出一个错误,错误信息为Assertion Error: ${message}
(默认消息为"no additional info provided"
)createFactoryWithConstraint<Constraint>()(value)
- 匹配运行时函数,验证value
的类型是否匹配Constraint
,而不改变value
的结果类型。satisfies
运算符的 polyfillisExact<Expected>()(actual)
- 匹配运行时函数,验证actual
的类型是否等于Expected
。否则显示 TypeScript 错误noop(..._args)
- 匹配对参数_args
不执行任何操作的运行时函数
搜索
当某个实用类型以不同名称被人所知时,请在此处添加以便更好地搜索。
ArrayValues
-ValueOf<Type>
Branded
-Opaque<Type, Token>
ConditionalKeys
-PickKeys<Type, Value>
Except
-StrictOmit<Type, Keys>
Get
-PathValue<Type, Path>
Mutable
-Writable<Type>
Nominal
-Opaque<Type, Token>
Set*
,例如SetOptional
-Mark*
,例如MarkReadonly<Type, Keys>
Unwrap
-Prettify<Type>
ValueOf
-DictionaryValues
内置类型
TypeScript 提供了几种实用类型来便于常见的类型转换。这些实用工具在全局范围内可用。
Awaited<Type>
- 这种类型旨在模拟async
函数中的await
操作,或Promise
上的.then()
方法 - 特别是它们递归解包Promise
的方式Capitalize<StringType>
- 将字符串中的第一个字符转换为大写形式ConstructParameters<Type>
- 从构造函数类型Type
的类型构造一个元组或数组类型Exclude<UnionType, ExcludedMembers>
- 通过从UnionType
中排除所有可赋值给ExcludedMembers
的联合成员来构造一个类型Extract<Type, Union>
- 通过从Type
中提取所有可赋值给Union
的联合成员来构造一个类型InstanceType<Type>
- 构造一个由Type
中构造函数的实例类型组成的类型Lowercase<StringType>
- 将字符串中的每个字符转换为小写形式NonNullable<Type>
- 通过从Type
中排除 null 和 undefined 来构造一个类型Omit<Type, Keys>
- 通过从Type
中选取所有属性然后移除Keys
来构造一个类型Parameters<Type>
- 从函数类型Type
的参数中使用的类型构造一个元组类型Partial<Type>
- 构造一个类型,将Type
的所有属性设置为可选Pick<Type, Keys>
- 通过从Type
中选取属性集Keys
来构造一个类型Readonly<Type>
- 构造一个类型,将Type
的所有属性设置为readonly
,意味着构造类型的属性不能被重新赋值Record<Keys, Type>
- 构造一个对象类型,其属性键为Keys
,属性值为Type
Required<Type>
- 构造一个类型,将Type
的所有属性设置为必需ReturnType<Type>
- 构造一个由函数类型Type
参数的返回类型组成的类型Uncapitalize<StringType>
- 将字符串中的第一个字符转换为小写形式Uppercase<StringType>
- 将字符串中的每个字符转换为大写版本
TypeScript 依赖表
ts-essentials | typescript / 依赖类型 |
---|---|
^10.0.0 | ^4.5.0 / 可选对等 |
^9.4.0 | ^4.1.0 / 可选对等 |
^8.0.0 | ^4.1.0 / 对等 |
^5.0.0 | ^3.7.0 / 对等 |
^3.0.1 | ^3.5.0 / 对等 |
^1.0.1 | ^3.2.2 / 开发 |
^1.0.0 | ^3.0.3 / 开发 |
贡献者
感谢这些优秀的人(表情符号键):
本项目遵循all-contributors规范。 欢迎任何形式的贡献!阅读更多