TypeScript 转换

在处理类型时,有时需要覆盖变量的类型,例如库提供了不正确的类型。

强制转换是覆盖类型的过程。


使用 as 进行转换

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

实例

let x: unknown = 'hello';
console.log((x as string).length);
亲自试一试 »

强制转换实际上并没有改变变量中数据的类型,例如下面的代码不能按预期工作,因为变量 x 仍然包含一个数字。

let x: unknown = 4;
console.log((x as string).length); // 打印 undefined 因为数字没有长度

TypeScript 仍将尝试对类型转换进行类型检查以防止看起来不正确的类型转换,例如以下将引发类型错误,因为 TypeScript 知道在不转换数据的情况下将字符串转换为数字是没有意义的:

console.log((4 as string).length); // 错误:将“数字”类型转换为“字符串”类型可能是错误的,因为这两种类型都没有充分重叠。 如果这是故意的,请先将表达式转换为“未知”。
下面的强制转换部分介绍了如何覆盖它。


Casting with <>

Using <> works the same as casting with as.

实例

let x: unknown = 'hello';
console.log((<string>x).length);
亲自试一试 »

这种类型的转换不适用于 TSX,例如在处理 React 文件时。


强制转换

要覆盖 TypeScript 在转换时可能抛出的类型错误,请先转换为 unknown,然后再转换为目标类型。

实例

let x = 'hello';
console.log(((x as unknown) as number).length); // x 实际上不是一个数字,所以这将返回 undefined
亲自试一试 »

TypeScript 练习

学习训练

训练:

使用 as 关键字将 "unknown" 变量 myVar 转换为字符串:

let myVar: unknown = "Hello world!";
console.log(.length);

开始训练