TypeScript 类型转换(Casting)

在使用类型时,有时需要重写变量的类型,比如一个库提供了错误的类型。

类型转换(Casting)是重写类型的过程。


使用 as 转换类型

转换变量的一种简单方法是使用 as 关键字,它将直接更改给定变量的类型。

实例
  1. let x: unknown = 'hello';
  2. console.log((x as string).length);
类型转换实际上并不会更改变量中的数据类型,例如,以下代码无法执行成功,因为变量 x 仍然是一个数字。
  1. let x: unknown = 4;
  2. console.log((x as string).length); // 因为数字没有 length 属性,所以会输出 undefined
TypeScript 仍将尝试进行类型检查转换,以防止看起来不正确的强制转换,例如,以下代码将引发类型错误,因为TypeScript 知道,如果不转换数据,将字符串强制转换为数字是没有意义的:
  1. console.log((4 as string).length); // Error: 将 'number' 类型转换为 'string' 可能会出错,因为两种类型都没有充分重叠。如果这是有意为之,请先将表达式转换为 'unknown'。

使用 <> 转换类型

使用 <> 到达与使用 as 一样的类型转换效果。

实例
  1. let x: unknown = 'hello';
  2. console.log((<string>x).length);
这种类型的转换不适用于 TSX,例如在处理 React 文件时。

强制类型转换

要避免 TypeScript 在类型转换时可能引发的类型错误,请先转换为 unknown ,然后再转换为目标类型。

实例
  1. let x = 'hello';
  2. console.log(((x as unknown) as number).length); // x 实际上不是一个数字,所以它将返回 undefined