各位靓仔靓女,今天咱们来唠唠 Vue 项目里 TypeScript 的那些事儿,保证让你的代码像加了Buff一样,既安全又高效!
开场白:TypeScript,Vue 的“贴身保镖”
TypeScript (简称 TS) 这玩意儿,简直是 Vue 的“贴身保镖”,有了它,就能在开发阶段提前发现 Bug,避免运行时出现各种“幺蛾子”。当然,要用好这个保镖,还得掌握一些“武功秘籍”。
第一式:类型定义(Types):你的变量要“户口本”
在 JavaScript 里,变量就像个“黑户”,想装啥就装啥,一会儿是字符串,一会儿又是数字,搞得人晕头转向。TypeScript 就不一样了,它要求每个变量都要有个“户口本”,也就是明确的类型定义。
1. 基础类型
- 字符串 (string):
const name: string = '张三';
- 数字 (number):
const age: number = 18;
- 布尔值 (boolean):
const isStudent: boolean = true;
- 数组 (array):
const numbers: number[] = [1, 2, 3];
或者const names: Array<string> = ['李四', '王五'];
- 元组 (tuple):
const person: [string, number] = ['赵六', 20];
(固定长度和类型的数组) - 枚举 (enum):
enum Color {
Red,
Green,
Blue,
}
const myColor: Color = Color.Green; // myColor 的值为 1
- Any (any):相当于放弃类型检查,慎用!
let something: any = '随便装啥都行';
- Void (void):表示没有返回值,常用于函数。
function sayHello(): void { console.log('Hello!'); }
- Null 和 Undefined (null, undefined):
const nothing: null = null;
const notDefined: undefined = undefined;
- Never (never):表示永远不会到达的类型,比如抛出异常的函数。
function throwError(message: string): never {
throw new Error(message);
}
2. 对象类型
对象类型可以使用接口(interface)或者类型别名(type alias)来定义。
示例代码:
// 使用接口
interface Person {
name: string;
age: number;
address?: string; // 可选属性
}
const student: Person = {
name: '小明',
age: 16,
};
// 使用类型别名
type Point = {
x: number;
y: number;
};
const origin: Point = {
x: 0,
y: 0,
};
类型定义总结:
| 类型 | 描述 |
| ——– | ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 2024-02-29 15:41:29
| 类型推断 | TypeScript 有时候很聪明,可以自己推断出变量的类型,不需要你显式声明。比如:const message = 'Hello';
(message 会被自动推断为 string 类型)。
第二式:接口(Interfaces):规范你的对象
接口就像一份“合同”,规定了对象应该有哪些属性,以及这些属性的类型。它能帮助你确保对象的结构符合预期。
示例代码:
interface User {
id: number;
name: string;
email: string;
isAdmin?: boolean; // 可选属性
createdAt: Date; //日期类型
updateInfo():void;
}
const adminUser: User = {
id: 1,
name: '管理员',
email: '[email protected]',
isAdmin: true,
createdAt: new Date(),
updateInfo: () => {
console.log('update admin info');
}
};
const normalUser: User = {
id: 2,
name: '普通用户',
email: '[email protected]',
createdAt: new Date(),
updateInfo: () => {
console.log('update user info');
}
};
接口的优势:
- 代码可读性:接口清晰地描述了对象的结构,方便阅读和理解。
- 代码可维护性:修改接口后,TypeScript 会检查所有使用该接口的地方,确保代码的一致性。
- 代码重用性:接口可以被多个对象实现,提高代码的重用性。
接口和类型别名的区别:
- 接口主要用于定义对象类型,而类型别名可以用于定义各种类型,包括联合类型、交叉类型等。
- 接口可以被
implements
实现,类型别名不行。 - 在定义联合类型或者交叉类型时,通常使用类型别名。
第三式:泛型(Generics):让你的函数更灵活
泛型就像“万金油”,可以让你编写出适用于多种类型的函数或组件。它可以避免代码重复,提高代码的灵活性。
1. 泛型函数
function identity<T>(arg: T): T {
return arg;
}
const myString: string = identity<string>('hello');
const myNumber: number = identity<number>(123);
2. 泛型接口
interface Result<T> {
data: T;
message: string;
code: number;
}
const successResult: Result<string> = {
data: '操作成功',
message: 'success',
code: 200,
};
const errorResult: Result<null> = {
data: null,
message: '操作失败',
code: 500,
};
3. 泛型类
class DataHolder<T> {
data: T;
constructor(data: T) {
this.data = data;
}
getData(): T {
return this.data;
}
}
const stringHolder = new DataHolder<string>('Hello');
const numberHolder = new DataHolder<number>(42);
**泛型的优势: