TypeScript 杂记十 《断言函数》
Posted 左手121
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript 杂记十 《断言函数》相关的知识,希望对你有一定的参考价值。
TypeScript 杂记十 《断言函数》
有一类特定的函数,在非预期结果出现时会抛出一个错误。这类函数就叫做断言函数。从 v3.7 开始,TypeScript 添加了一个名为 asserts 的新关键字,它能够使编译器从断言起就知道正确的类型。
- 断言函数的几种形式:
- asserts 关键字,函数返回值是 void
- is 关键字,函数返回值是 boolean
function assert(input: any): asserts input
function assert(input: any): input is string
return true
// 两个都使用
function assert(input: any): asserts input is string
- 我们先看一个示例:
function toUpperCase(input: unknown)
if (typeof input !== 'string')
throw new Error('input 参数必须是字符串类型')
// TS 自动推断出 input 是 string
return input.toUpperCase()
- asserts 关键字
- 如下:参数进行断言签名,此时 input 会被 TS 认定为 string
- 这时候只是 TS 类型推断不会报错了,但是实际运行还是会报错,所以我们需要处理一下错误时候的情况
- 没有返回值,也不需要返回值
function assertIsString(condition: unknown): asserts condition
// 处理错误情况
if (!condition)
throw new Error('input 参数必须是字符串类型')
function toUpperCase(input: unknown)
assertIsString(typeof input === 'string')
// TS 自动推断出 input 是 string
return input.toUpperCase()
- is 关键字
- 谓词签名-强转参数,让使用其函数的函数可以正确判断类型
- 需要返回一个 boolean
- 如下:在 assertIsString 返回为真的情况下,input 被转成了字符串
- 注意:
- 无论你是返回 true 还是返回 false,TS 都是认为 true 的时候 input 是 string
- 这个返回的 true,false 是为了让代码在运行阶段能够正确运行,所以你必须是判断是 string 时候返回 true
function assertIsString(input: unknown): input is string
return typeof input === 'string'
function toUpperCase(input: unknown)
if (assertIsString(input))
// TS 自动推断出 input 是 string
return input.toUpperCase()
return input
- asserts A is B
- is 是让强制转换
- asserts 是让使用函数之后的代码都认为是某一个类型
- 不需要返回值
function assertIsString(condition: unknown): asserts condition
// 之后的 input 是 string
assertIsString(typeof input === 'string')
function assertIsString2(condition: unknown): asserts condition is number
// 这个时候因为使用了 is 进行强制转换所以后续的类型都是 number
assertIsString2(typeof input === 'string')
断言签名非常强大的。我们可以用它们实现一些非常复杂的想法和设计。来对我们的程序进行类型验证。
以上是关于TypeScript 杂记十 《断言函数》的主要内容,如果未能解决你的问题,请参考以下文章