TypeScript 最大的特点就是在 JavaScript 的基础上增加了静态类型。给变量、函数参数和返回值加上类型标注后,很多错误在写代码的阶段就能被发现,而不是等到页面报错才排查。这篇入门教程带你掌握最常用的类型标注写法。
为什么需要类型标注
先看一段 JavaScript:
function add(a, b) {
return a + b;
}
add(1, "2"); // "12",不报错,但结果往往不是你想要的
add(1, "2") 会悄悄返回字符串 "12",这种问题在项目变大后很难排查。TypeScript 在编译阶段就能拦住它:
function add(a: number, b: number): number {
return a + b;
}
add(1, "2"); // 报错:string 类型的参数不能赋给 number 类型的参数
类型标注的写法很简单:变量名: 类型,参数和返回值都一样。
常用的基础类型
let age: number = 18;
let name: string = "小明";
let isStudent: boolean = true;
let hobbies: string[] = ["读书", "跑步"]; // 字符串数组
let pair: [string, number] = ["身高", 175]; // 元组:固定长度和类型
let nothing: null = null;
let notFound: undefined = undefined;
变量先声明后赋值时,也可以只声明类型:
let title: string;
title = "TypeScript 入门"; // 正确
title = 123; // 报错:不能把 number 赋给 string
类型推断:能省则省
TypeScript 很聪明,初始赋值后能自动推断类型,标注可以省略:
let count = 10; // 自动推断为 number
count = "10"; // 依然报错,效果和 let count: number = 10 一样
function double(n: number) {
return n * 2; // 返回值自动推断为 number
}
推荐做法:函数参数必须标注,返回值让 TS 推断,简洁又安全。
函数与对象类型
函数标注参数和返回值,对象则用「形状」来描述:
function greet(name: string, greeting?: string): string {
return `${greeting ?? "你好"},${name}`;
}
greet("小明"); // "你好,小明"
greet("小红", "早上好"); // "早上好,小红"。? 表示可选参数
let user: { name: string; age: number } = {
name: "小明",
age: 18,
};
user.age = 19; // 正确
user.age = "二十"; // 报错:类型不匹配
对象类型字段多的时候,通常用 interface 或 type 给它起个名字,这个后面再展开讲。
联合类型:多个类型二选一
一个值可能是多种类型时,用 | 分隔:
let id: string | number;
id = "abc123"; // 正确
id = 42; // 正确
id = true; // 报错
function format(value: string | number): string {
return value.toString();
}
format(100); // "100"
format("hi"); // "hi"
小结
- 类型标注语法是
变量: 类型,覆盖变量、参数和返回值 - 常用类型:
number、string、boolean、数组、元组、null、undefined - 初始化后 TS 能自动推断类型,不必处处手写
- 对象用「形状」描述,字段多了交给
interface - 一个值有多种可能时用联合类型
|