六维教程

TypeScript 类型注解

TypeScript 真正强大的地方在于类型注解,类型注解的价值在于:让代码本身成为文档

当你给变量、函数参数、返回值加上类型标签,IDE 就能提供精准的提示,编译器就能提前拦截错误,队友看代码就能理解意图。

// 没有注解:看函数签名,不知道 userName 是什么类型
function getUserData(userName) { ... }

// 有注解:一看就知道是字符串
function getUserData(userName: string) { ... }

什么是类型注解

类型注解就是在变量、函数、参数等后面用冒号 : 指定类型

语法非常简单:

let 变量名: 类型 = 值;

举个例子:

// 给 name 注解为 string 类型
let name: string = '张三';

// 给 age 注解为 number 类型
let age: number = 18;

// 给 isActive 注解为 boolean 类型
let isActive: boolean = true;

如果后面赋了错误类型的值,TypeScript 就会报错:

let name: string = '张三';
name = 100; // ❌ 类型 'number' 不能赋值给类型 'string'

注解的语法疑问

初学者可能会疑惑:为什么 TypeScript 把类型写在变量后面name: string),而不是像 Java 那样写在前面(string name)?

这是 JavaScript 的历史原因,TypeScript 作为超集,语法必须兼容 JavaScript,而 JavaScript 不支持在变量前声明类型。

写成 : string 是 TypeScript 的扩展语法,对 JavaScript 引擎来说它是合法的(会被擦除)。

注解的核心场景

类型注解最能发挥价值的几个场景:

// 场景1:函数参数——团队协作的"契约"
function calculatePrice(basePrice: number, discount: number): number {
  return basePrice * (1 - discount);
}
// 调用方一眼就知道要传数字,返回的也是数字

// 场景2:声明时未赋值,必须注解
let userName: string; // 没有初始值,推断不出来
userName = '张三';     // ✅ 知道是 string

类型注解 vs 类型推断

很多新手会问:既然 TypeScript 能自动推断类型,为什么还要写注解?

先看类型推断:

let message = 'Hello'; // TypeScript 自动推断为 string
message = 123; // ❌ 报错,因为推断为 string

TypeScript 很聪明,大多数情况下能自动推断出类型。

但有些场景必须用注解:

场景 为什么需要注解
变量声明时未赋值 无法推断,默认为 any(失去类型检查)
函数参数 无法推断参数类型
函数返回值(复杂时) 确保返回类型符合预期
定义对象结构 明确对象的“形状”
// 场景1:声明时未赋值,推断为 any(不推荐)
let something; // 类型为 any
something = 'hello'; // 不报错
something = 123; // 也不报错 —— 失去了类型保护

// 场景2:函数参数必须注解
function greet(name: string) { // ✅ 必须写
  return 'Hello, ' + name;
}

能推断的可以不写,但函数参数和返回值建议明确注解,这是团队协作的“文档”。

上一篇
TypeScript 环境搭建
下一篇
TypeScript 基础类型