Skip to content

类型断言

有时,你会获得有关 TypeScript 不知道的值类型的信息。

例如,如果你正在使用 document.getElementById ,TypeScript 只知道这将返回某种类型的HTMLElement ,但你可能知道你的页面将始终具有 HTMLCanvasElement 给定 ID 的值 。

在这种情况下,你可以使用类型断言来指定更具体的类型:

typescript
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;

与类型注释一样,类型断言由编译器删除,不会影响代码的运行时行为。 还可以使用尖括号语法(除非代码在 .tsx 文件中),它是等效的:

typescript
const myCanvas = <HTMLCanvasElement>document.getElementById("main_canvas");

提醒:因为类型断言在编译时被移除,所以没有与类型断言相关联的运行时检查。 null 如果类型断言错误,则不会出现异常。

TypeScript 只允许类型断言转换为更具体或不太具体的类型版本。此规则可防止“不可能”的强制,例如:

typescript
const x = "hello" as number;

将类型 string 转换为类型 number 可能是错误的,因为两种类型都没有充分重叠。如果这是有意的,请先将表达式转换为 any 或 unknown ( unknown ,我们将在后面介绍),然后是所需的类型:

typescript
const x = ("hello" as unknown) as number;