跳到正文

类型检查

Type Checking

中级通用

类型检查(Type Checking)是检查代码中的值是否按预期类型使用的过程,例如有没有把字符串当数字相加。它能在开发阶段发现一部分数据用错方式的问题,减少这类错误进入运行中的产品。

你可能会说:「帮我看看这些字段有没有被当成错误的类型使用,最好在运行前就能发现问题。」

读之前建议先了解

动手看看

checkout.ts
01 let price: number;
02 price = "128";
02 price = 128;
类型错误不能将 string 类型的值赋给 number 类型的变量。引号里的 128 是文本,不是数字。
类型检查通过price 声明为 number,赋给它的 128 也是数字。
01 let price: string;
02 price = "128";
02 price = 128;
类型检查通过price 声明为 string,赋给它的 "128" 也是文本。
类型错误不能将 number 类型的值赋给 string 类型的变量。没有引号的 128 是数字。
变量声明的类型
赋给变量的值

切换变量声明的类型和赋给它的值,看看编辑器何时标红。类型检查比较的是值的类型,而不只是它看起来写了什么。

price 声明为数字时,128 可以赋给它;"128" 虽然看着像数字,却是文本,因此会提前报错。

要点

  1. 1

    检查值和操作能否对上

    我们给订单金额做加法时,代码需要拿到数字。如果某处传来字符串,类型检查就可能指出这里的用法不匹配。这样你能沿着数据传递路径,找到该转换或修改定义的位置。

  2. 2

    检查结果取决于已知信息

    类型检查依据代码里的类型声明和推断结果工作。如果你把一个值笼统地标成“任意类型”,检查工具就很难判断后续用法是否合理。所以类型写得准确,检查才更有帮助。

  3. 3

    检查通过不等于运行正确

    一个数字即使通过了类型检查,也可能是负的订单数量。类型检查关注的是值能否按这种类型使用,不负责证明业务结果正确。我们仍需要测试和业务规则来检查这些情况。

容易混淆的地方

类型检查和数据校验最容易混淆:前者依据代码中已知的类型信息,检查你怎样使用一个值;后者检查运行时拿到的真实数据,例如接口返回的价格是否真是数字、是否大于零。代码规范检查则偏向代码写法和约定。它们能配合使用,但不能互相替代。

什么时候用

适合用

  • AI Agent 改了订单计算逻辑,你想在合并前发现字段类型与函数参数不匹配。
  • 前后端约定接口字段后,你想检查页面代码有没有把可为空的字段直接当作必有值使用。
  • 重构用户资料表单时,你想找出受字段类型变化影响的调用位置。

不适合用

  • 你要确认接口实际返回的数据是否缺字段或格式错误;这得在运行时做数据校验。
  • 你要确认优惠券过期后不能抵扣;这是业务规则,适合写测试用例验证。
  • 你只是想统一缩进和引号写法;交给代码格式化工具更直接。

练一练

你在做结算页。接口声明价格是数字,但线上偶尔返回字符串,导致总价计算异常。你会让 AI Agent 怎么处理?

让 AI 帮你做

请对结算页相关代码运行类型检查,找出价格、数量和总价计算中的类型不匹配,说明每处错误的数据来源并修复。接口返回值属于运行时数据,请另行检查是否需要在入口做数据校验;不要靠改成任意类型消除报错。

接下来学什么