刚用 TypeScript 的时候,很多人会觉得它麻烦。明明 JavaScript 写得好好的,为啥非要加个“类型”?但当你改过别人写的 JS 代码,发现函数传个字符串还是数组都搞不清时,你就明白类型的重要性了。
为什么需要类型
想象你在修电脑,接到一张工单写着“开机没反应”。这问题太模糊了——是电源坏了?系统崩溃?还是显示器没开?TypeScript 就像给代码加了标签,让每个变量、参数、返回值都有明确身份,减少“猜”的环节。
比如你写个处理用户信息的函数:
function greet(user) {
return "Hello, " + user.name;
}
如果 user 是 null 或者压根没有 name 属性,运行时就出错。这种问题在项目大了之后特别难查。
基础类型怎么用
TypeScript 提供了 string、number、boolean 这些基本类型,直接在变量后加冒号声明就行。
let username: string = "john";
let age: number = 25;
let isActive: boolean = true;
这样一旦你把字符串赋成数字,编辑器立马报错,不用等到运行才发现。
函数参数加上类型更安全
回到前面那个 greet 函数,加上类型后长这样:
function greet(user: { name: string }) {
return "Hello, " + user.name;
}
现在如果调用时传了个空值或者格式不对的对象,TypeScript 会提前提醒你。就像插头和插座,形状对不上就插不进去,省得烧保险。
用接口整理复杂结构
当对象字段变多,可以定义一个接口来统一描述。
interface User {
name: string;
age?: number; // 可选属性
id: number;
}
然后在函数里使用:
function printUser(user: User) {
console.log(user.name + ' (ID: ' + user.id + ')');
}
这样别人看代码就知道必须传什么,少哪个关键字段都会提示。
联合类型应对多种可能
有些场景下数据可能是多种类型之一。比如状态码可能是数字也可能是字符串。
let statusCode: number | string = 404;
statusCode = "not found"; // 合法
statusCode = true; // 报错
这种写法让你既能灵活处理不同情况,又不至于乱传类型。
类型推断帮你省事
并不是每个变量都要手动标注类型。TypeScript 能根据赋值自动推断。
let count = 10; // 自动识别为 number
let msg = "hello"; // 自动识别为 string
只有在无法判断或需要明确约束时才需要手动写类型。
实际开发中的小技巧
在 Vue 或 React 项目中引入 TypeScript 后,组件的 props 如果写了类型,团队其他人用的时候就有提示,不会瞎猜该传啥。
调试接口返回数据时,也可以先定义好响应类型的结构,再对接口结果做类型断言,避免访问不存在的字段。