断言函数与类型谓词的组合精炼
通过自定义类型谓词与断言函数构建可组合的类型细化链。 · 难度:入门 · +10XP
断言函数与类型谓词的组合精炼
TypeScript 3.7 引入的断言函数(asserts)和类型谓词(is)可以组合使用,创建强大的类型细化管道。本教程将演示如何编写一个“断言链”:先断言一个值非空,再断言它是特定类型,最后断言它满足某个条件。通过返回 never 或使用 assert 修饰符,让类型系统逐层收窄类型。我们还将学习如何利用断言函数实现类似“检查一个对象包含所有必要键”的编译时验证。
function assertNonNull(value: T): asserts value is NonNullable {
if (value === null || value === undefined) {
throw new Error('值不能为空')
}
}
function assertString(value: unknown): asserts value is string {
if (typeof value !== 'string') {
throw new Error('不是字符串')
}
}
function process(data: unknown) {
assertNonNull(data)
assertString(data)
// 此时 data 的类型为 string
console.log(data.toUpperCase())
}