# 类型断言

原文地址 (opens new window)

在本教程中,你将学习 TypeScript 中的类型断言。

# TypeScript 中的类型断言介绍

类型断言可以让 TypeScript 编译器把某个值的类型视为特定的类型,使用 as 关键字来实现:

expression as targetType;
1

类型断言也被称为类型收缩,允许你收缩 联合类型 的类型范围。看看下面一个简单的函数:

function getNetPrice(
  price: number,
  discount: number,
  format: boolean,
): number | string {
  let netPrice = price * (1 - discount);
  return format ? `$${netPrice}` : netPrice;
}
1
2
3
4
5
6
7
8

getNetPrice() 函数接受 price, discountformat 三个参数,返回一个联合类型为 number | string 的值。如果 format 的值为 truegetNetPrice() 函数以字符串形式返回格式化后的价格,否则以数字的形式返回价格。

下面使用 as 关键字告诉编译器,赋值给 netPrice 变量的值是一个字符串:

let netPrice = getNetPrice(100, 0.05, true) as string;
console.log(netPrice);
1
2

输出:

$95
1

同样的,下面的例子使用 as 关键字告诉编译器,赋值给 netPrice 的值是一个数字:

let netPrice = getNetPrice(100, 0.05, false) as number;
console.log(netPrice);
1
2

输出:

95
1

注意类型断言不做任何 类型转换 的操作,它只是告诉编译器进行类型检查的时候应用哪种类型。

# 可选的类型断言语法

你也可以使用尖括号语法 <> 进行类型断言,如下所示:

<targetType>value;
1

例如:

let netPrice = <number>getNetPrice(100, 0.05, false);
1

注意你不能在 React 等库中使用尖括号语法 <>,出于这个原因,进行类型断言的时候保持使用 as 关键字是一种不错的选择。

# 小结

  • 类型断言告诉编译器把某个值的类型视为特定的类型;
  • 类型断言不做任何转型转换的操作;
  • 类型断言的实现可以使用 as 关键字或者尖括号 <> 语法。