类型断言
类型断言允许开发者手动指定变量的类型。在 TypeScript 中,有两种形式的类型断言:尖括号语法和as语法。
当我们编写代码时,我们有时并没有显式地告诉编程语言变量的类型是什么,而是让编程语言自己去猜测。这个过程就叫做类型推断。
- 尖括号语法:
let value: any = "Hello, TypeScript!";
let length: number = (<string>value).length;
console.log(length); // 输出:19
-
as语法:
let value: any = "Hello, TypeScript!";
let length: number = (value as string).length;
console.log(length); // 输出:19
联合类型
联合类型表示一个变量可以拥有多种可能的类型,使用 |
符号定义。
let value: string | number;
value = "Hello, TypeScript!";
console.log(value.length); // 可以访问string类型的属性和方法
value = 42;
console.log(value.toFixed(2)); // 可以访问number类型的属性和方法
实现原理:
联合类型的实现原理是 TypeScript 编译器会根据变量的使用上下文进行类型推断。在不同的上下文中,编译器将根据实际赋值情况确定变量的类型。
交叉类型
交叉类型表示一个变量可以同时拥有多种类型的属性,使用 &
符号定义。
interface Dog {
bark(): void;
run(): void;
}
interface Bird {
fly(): void;
chirp(): void;
}
type BirdDog = Dog & Bird;
let myPet: BirdDog = {
bark() {
console.log("Woof!");
},
run() {
console.log("Running");
},
fly() {
console.log("Flying");
},
chirp() {
console.log("Chirp");
}
};
应用场景:
- 在需要同时使用多种类型属性的场景,如对象的组合。
- 在 mixins 模式中,将多个对象的功能组合到一个对象中。
实现原理:
交叉类型的实现原理是通过合并多个类型的属性,创建一个新的类型,使得新类型拥有各个类型的属性。