TypeScript 类型转换


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

强制转换是重写类型的过程。


类型转换用as

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

示例

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

转换实际上并不会更改变量中数据的类型,例如,以下代码将无法按预期工作,因为变量x仍然持有一个号码。

let x: unknown = 4;
console.log((x as string).length); // prints undefined since numbers don't have a length

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

console.log((4 as string).length); // Error: Conversion of type 'number' to type 'string' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
下面的强制投射部分介绍了如何覆盖它。


类型转换用<>

使用 <> 与使用 进行强制转换的效果相同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 is not actually a number so this will return undefined
亲自试一试 »

TypeScript 练习

通过练习测试一下

练习:

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

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

开始练习