TypeScript 类型断言
在处理类型时,有时需要覆盖变量的类型,例如当库提供了不正确的类型时。
类型断言是覆盖类型的一种过程。
使用 as
进行类型断言
断言变量的一种直接方法是使用 as
关键字,它将直接更改给定变量的类型。
类型断言实际上不会改变变量中的数据类型,例如,以下代码将无法按预期工作,因为变量 x
仍然是一个数字。
let x: unknown = 4;
console.log((x as string).length); // 打印 undefined,因为数字没有 length 属性
TypeScript 仍然会尝试对断言进行类型检查,以防止出现看似不正确的断言,例如,以下代码将抛出类型错误,因为 TypeScript 知道将字符串断言为数字是没有意义的,除非进行数据转换。
console.log((4 as string).length); // 错误:类型“number”到类型“string”的转换可能是一个错误,因为两种类型没有足够的重叠。如果这是故意的,请先将表达式转换为“unknown”。
下方的“强制断言”部分将介绍如何覆盖此限制。
使用 <>
进行类型断言
使用 <> 进行类型断言与使用 as
的效果相同。
此类型的断言在 TSX 中将不起作用,例如在处理 React 文件时。
强制断言
要覆盖 TypeScript 在进行类型断言时可能抛出的类型错误,请先将变量断言为 unknown
,然后再断言为目标类型。
示例
let x = 'hello';
console.log(((x as unknown) as number).length); // x 实际上不是数字,所以这里会返回 undefined
自己动手试一试 »