TypeScript 类型断言

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


类型断言允许您手动告诉 TypeScript 值的类型。它不会改变值;它只是告诉 TypeScript 将该值视为特定类型。

这是 TypeScript 类型断言的一个简单示例。您可以阅读其余教程以了解更多信息。

示例

let value: any = "hello";
let strLength = (value as string).length;

console.log(strLength);

// Output: 5

在这里,我们告诉 TypeScript 将 value 视为一个字符串,这样我们就可以安全地访问该字符串的 length 属性。


类型断言语法

有两种编写类型断言的方式

1. 使用 as (推荐)

let value = "hello" as string;

2. 使用尖括号 <>

let value = <string>"hello";

对象类型断言

let user = {} as { name: string; age: number };

user.name = "Bob";
user.age = 30;

console.log(user);

输出

{ name: 'Bob', age: 30 }

通常,TypeScript 不允许您将 nameage 分配给空对象。但是,通过类型断言

let user = {} as { name: string; age: number };

您在告诉 TypeScript 将 user 视为一个具有 nameage 属性的对象。


为什么需要类型断言?

TypeScript 会尝试推断变量的类型,以便在编译时捕获错误。但是,有时 TypeScript 没有足够的信息——例如

  • API 响应
  • DOM 元素
  • 来自外部源的动态数据

在这些情况下,TypeScript 会限制我们对变量的操作,因为它通常被键入为 any。

这就是类型断言的用武之地——它允许我们告诉 TypeScript 值的确切类型,以便我们可以对其进行安全的操作。


常见问题

何时不使用类型断言?

当您不确定值的实际类型时,不应使用类型断言。例如,

let value: any = "hello";

// Incorrect assertion — value is NOT a number
let num = value as number;

console.log(num * 2); // Runtime error: NaN

强制使用错误的类型可能会欺骗 TypeScript 认为一切正常,但它可能会导致运行时错误。


API 数据类型断言

在处理 API 时,返回的数据通常被键入为 any。TypeScript 不知道响应的确切结构,因此在这种情况下,类型断言可以帮助您定义响应数据。

例如,

const response = await fetch("/api/user");
const data = await response.json();

// Tell TypeScript what structure to expect
const user = data as { id: number; name: string };

console.log(user.name); // Now safely accessible

如果没有断言,TypeScript 不会允许您直接访问 user.name,因为它不知道 data 的结构。


类型断言与类型转换

类型断言 类型转换
告诉 TypeScript 如何处理一个值。 将值从一种类型转换为另一种类型。
对运行时没有影响(仅在编译时)。 在运行时更改值。
anyAPIDOM 有帮助。 用于在类型之间进行转换(例如,将 float 转换为 int),主要用于 C++ 和 Java 等传统语言。

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战