L.Leverage Learn从第一行代码,到读懂真实后端查看项目源码

TypeScript 基础 / 第 5 课

给 JavaScript 值写上类型

从熟悉的变量和函数开始,理解 TypeScript 如何描述值并提前发现不匹配。

◷ 预计 8 分钟 · 面向初学者

JavaScript 变量可以先放数字,之后再放字符串,这种自由很方便,也可能让错误晚些才出现。比如函数原本要计算数量,调用时却传入一段文字。TypeScript 在 JavaScript 的基础上增加类型描述,让编辑器和编译器能在运行前指出一部分不匹配。它不会改变 JavaScript 的值,也不能保证程序没有所有错误。

最常见的类型有 number、string、boolean。可以在变量名后写冒号和类型:

let cups: number = 2;
let flavor: string = '柠檬';
let isReady: boolean = true;

如果赋值已经清楚,TypeScript 通常会推断类型。let count = 3 会推断 count 是数字;count = '三' 会报类型错误。const 变量不能重新赋值,let 可以重新赋值,但类型仍要兼容。推断不是运行时转换,数字不会因为被标注为 string 就变成文字。能从初始值看出类型时,通常不用再重复标注。

函数也能描述输入和结果:

function double(value: number): number {
  return value * 2;
}

参数后的 number 限定调用时传入的值;括号后的 number 表示返回值类型。double(4) 的结果是 8,而 double('4') 会被指出不合适。没有写 return 的函数通常返回 undefined,所以不要把它声明成返回数字的函数。参数和返回值是两处不同的约定:前者说明函数需要什么,后者说明调用者会得到什么。

类型不会替你决定程序要做什么。它只是让变量、参数和结果之间的关系更明确。先观察值的用途,再选择类型;不要为了消除提示随意改成更宽泛的类型,否则检查能力也会变弱。类型错误是检查器给出的线索,通常要回头检查传入值、函数签名和计算步骤是否表达了同一个意思。它不会自动替你修正代码。

小练习:写一个 addTax 函数,接收商品价格 price(数字)和税额 tax(数字),返回两者之和(数字)。如果调用 addTax(10, '2'),哪里不符合约定?

答案:函数签名可写为 function addTax(price: number, tax: number): number { return price + tax; }。第二个参数传入了字符串 '2',与 number 不符;应传入数字 2。

互动练习:为变量标注类型

变量 score 保存整数分数,哪种 TypeScript 标注合适?

选择一个答案

✓
这一课,你已经能……

类型描述值的形状,推断能减少重复标注,函数类型则写清输入和输出。