TypeScript static 怎么用
TypeScript 是前端开发里很火的工具,它能帮我们少写 bug、更清楚代码逻辑,而 static 关键字就是它藏在类里的一个实用小功能,很多新手容易搞混它和普通属性的区别,其实用生活化的例子就能轻松搞懂。
什么是类里的「静态」?
先想个日常场景:你开了一家奶茶店,每一杯奶茶都是「奶茶」这个类的实例——每杯奶茶有自己的温度、甜度,这些是实例的属性,不同奶茶可能不一样。但店里的「店名」「营业时间」是整个奶茶店共有的,不管做多少杯奶茶,这些信息不会变。

对应到 TypeScript 里,static 就是用来标记「整个类共有,不属于单个实例」的属性或方法。普通属性是每个实例自己的,就像每杯奶茶的甜度;static 属性是类的,就像奶茶店的店名。
静态属性和普通属性的区别
举个代码例子更清楚:
`typescript
class MilkTeaShop {
// 普通属性:每个实例自己的属性
shopName: string;
temperature: number;
// 静态属性:整个类共有
static openingTime = "9:00-22:00";
constructor(name: string, temp: number) {
this.shopName = name;
this.temperature = temp;
}
}
// 创建两个奶茶实例
const milkTea1 = new MilkTeaShop("茶小甜", 65);
const milkTea2 = new MilkTea("茶甜小", 70);
`
这里 milkTea1 和 milkTea2 都有自己的 shopName 和 temperature,改其中一个的 temperature,另一个不会变;但 MilkTeaShop.openingTime 是静态属性,不管创建多少杯奶茶,它都是同一个值——要是你想改营业时间,直接改 MilkTeaShop.openingTime,所有用这个类创建的实例都会自动更新这个信息,不用一个个改实例。
要注意:静态属性不能通过实例访问,比如 milkTea1.openingTime 就会报错,必须用类本身来访问,这是新手常踩的小坑。
静态方法怎么用?
和静态属性一样,用 static 标记的方法是类的方法,不是实例的方法。还是用奶茶店的例子:普通方法是「给这杯奶茶加珍珠」,只针对单个奶茶;静态方法是「统计今天卖了多少杯奶茶」,这个数据是整个店的,属于类本身。
`typescript
class MilkTeaShop {
static salesCount = 0;
// 静态方法:统计销量
static addSale() {
this.salesCount++;
}
// 普通方法:给单个奶茶加料
addTopping(topping: string) {
console.log(给这杯奶茶加${topping});
}
}
// 卖了2杯奶茶
MilkTeaShop.addSale();
MilkTeaShop.addSale();
console.log(MilkTeaShop.salesCount); // 输出2
// 实例调用普通方法
const myTea = new MilkTeaShop("茶小甜", 60);
myTea.addTopping("珍珠"); // 正常执行
`
这里 addSale 是静态方法,用来统计整个类的销量,不能通过实例调用;而 addTopping 是普通方法,只能给单个奶茶加料。
什么时候该用 static?
不用纠结要不要用,记住一个简单原则:如果这个属性或方法和具体的单个实例无关,是整个类的公共信息,就用 static。比如:
- 工具类里的通用方法:比如一个
StringUtils类的trim方法,不管处理哪个字符串,逻辑都一样,就加static; - 全局计数、配置信息:比如项目里的接口地址,是整个项目用的,就可以放在静态属性里;
- 不需要访问实例属性的方法:比如计算两个数的平均值,不需要用到某个实例的信息,就用静态方法。
要是你把不需要用 static 的属性加了 static,会导致所有实例共用这个属性,改一个就全改,很容易出 bug;反过来,该用 static 的地方不用,每次创建实例都存一份相同的信息,还会浪费内存。
掌握了这些,TypeScript 里的 static 就不会难用,它能帮你写出更整洁、逻辑更清晰的代码。