TypeScript 关键字
介绍
TypeScript 是 JavaScript 的超集,它通过添加静态类型和其他特性来增强 JavaScript 的功能。在 TypeScript 中,关键字是语言的核心组成部分,它们用于定义变量、函数、类、接口等。理解这些关键字的作用和用法,是掌握 TypeScript 的基础。
本文将详细介绍 TypeScript 中的一些常用关键字,并通过代码示例和实际案例帮助你更好地理解它们的应用场景。
常用 TypeScript 关键字
let
和 const
let
和 const
是 TypeScript 中用于声明变量的关键字。它们与 JavaScript 中的 var
不同,提供了块级作用域。
let
用于声明可变的变量。const
用于声明不可变的常量。
let count = 10;
count = 20; // 合法
const pi = 3.14;
pi = 3.14159; // 非法,会报错
建议优先使用 const
,只有在变量需要重新赋值时才使用 let
。
function
function
关键字用于声明函数。TypeScript 允许你为函数的参数和返回值指定类型。
function add(a: number, b: number): number {
return a + b;
}
console.log(add(2, 3)); // 输出: 5
class
class
关键字用于定义类。TypeScript 支持面向对象编程,类是实现封装、继承和多态的基础。
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
speak(): void {
console.log(`${this.name} makes a noise.`);
}
}
const dog = new Animal('Dog');
dog.speak(); // 输出: Dog makes a noise.
interface
interface
关键字用于定义接口。接口是 TypeScript 中用于描述对象形状的一种方式,常用于定义对象的类型。
interface Person {
name: string;
age: number;
}
function greet(person: Person): void {
console.log(`Hello, ${person.name}`);
}
const user: Person = { name: 'Alice', age: 25 };
greet(user); // 输出: Hello, Alice
type
type
关键字用于定义类型别名。它可以用来为复杂的类型定义一个新的名称,使代码更易读。
type StringOrNumber = string | number;
function printValue(value: StringOrNumber): void {
console.log(value);
}
printValue('Hello'); // 输出: Hello
printValue(42); // 输出: 42
type
和 interface
都可以用来定义对象类型,但它们有一些细微的区别。interface
更适合用于定义对象的形状,而 type
更适合用于定义联合类型、交叉类型等复杂类型。
enum
enum
关键字用于定义枚举类型。枚举类型允许你为一组数值赋予更有意义的名称。
enum Color {
Red,
Green,
Blue,
}
let color: Color = Color.Green;
console.log(color); // 输出: 1
枚举类型在 TypeScript 中是双向映射的,即你可以通过名称获取值,也可以通过值获取名称。
as
as
关键字用于类型断言。当你比 TypeScript 更清楚某个值的类型时,可以使用类型断言来告诉 TypeScript 该值的类型。
let someValue: any = 'this is a string';
let strLength: number = (someValue as string).length;
console.log(strLength); // 输出: 16
类型断言不会改变变量的实际类型,它只是告诉 TypeScript 编译器你确信该变量的类型。
typeof
typeof
关键字用于获取变量的类型。它在 TypeScript 中常用于类型保护。
function printType(value: string | number): void {
if (typeof value === 'string') {
console.log('Value is a string');
} else {
console.log('Value is a number');
}
}
printType('Hello'); // 输出: Value is a string
printType(42); // 输出: Value is a number
keyof
keyof
关键字用于获取对象类型的键的联合类型。它常用于与泛型一起使用,以确保类型安全。
interface Person {
name: string;
age: number;
}
type PersonKeys = keyof Person; // "name" | "age"
function getProperty(obj: Person, key: PersonKeys) {
return obj[key];
}
const person: Person = { name: 'Alice', age: 25 };
console.log(getProperty(person, 'name')); // 输出: Alice
实际案例
使用 interface
和 type
定义复杂类型
假设你正在开发一个电商应用,需要定义一个商品类型。你可以使用 interface
和 type
来定义商品的属性和分类。
interface Product {
id: number;
name: string;
price: number;
category: Category;
}
type Category = 'Electronics' | 'Clothing' | 'Books';
const product: Product = {
id: 1,
name: 'Laptop',
price: 999.99,
category: 'Electronics',
};
console.log(product);
使用 enum
定义订单状态
在电商应用中,订单的状态可能会经历多个阶段。你可以使用 enum
来定义这些状态。
enum OrderStatus {
Pending,
Shipped,
Delivered,
Cancelled,
}
const order = {
id: 123,
status: OrderStatus.Pending,
};
if (order.status === OrderStatus.Pending) {
console.log('Order is pending');
}
总结
TypeScript 中的关键字是编写类型安全代码的基础。通过掌握这些关键字,你可以更好地利用 TypeScript 的强大功能,编写出更健壮、更易维护的代码。
附加资源与练习
- 练习 1: 尝试使用
interface
和type
定义一个用户类型,包含name
、email
和age
属性。 - 练习 2: 使用
enum
定义一个表示星期几的枚举类型,并编写一个函数根据输入的星期几返回相应的活动安排。
更多关于 TypeScript 的学习资源,可以参考 TypeScript 官方文档.