跳到主要内容

TypeScript 关键字

介绍

TypeScript 是 JavaScript 的超集,它通过添加静态类型和其他特性来增强 JavaScript 的功能。在 TypeScript 中,关键字是语言的核心组成部分,它们用于定义变量、函数、类、接口等。理解这些关键字的作用和用法,是掌握 TypeScript 的基础。

本文将详细介绍 TypeScript 中的一些常用关键字,并通过代码示例和实际案例帮助你更好地理解它们的应用场景。

常用 TypeScript 关键字

letconst

letconst 是 TypeScript 中用于声明变量的关键字。它们与 JavaScript 中的 var 不同,提供了块级作用域。

  • let 用于声明可变的变量。
  • const 用于声明不可变的常量。
typescript
let count = 10;
count = 20; // 合法

const pi = 3.14;
pi = 3.14159; // 非法,会报错
提示

建议优先使用 const,只有在变量需要重新赋值时才使用 let

function

function 关键字用于声明函数。TypeScript 允许你为函数的参数和返回值指定类型。

typescript
function add(a: number, b: number): number {
return a + b;
}

console.log(add(2, 3)); // 输出: 5

class

class 关键字用于定义类。TypeScript 支持面向对象编程,类是实现封装、继承和多态的基础。

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 中用于描述对象形状的一种方式,常用于定义对象的类型。

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 关键字用于定义类型别名。它可以用来为复杂的类型定义一个新的名称,使代码更易读。

typescript
type StringOrNumber = string | number;

function printValue(value: StringOrNumber): void {
console.log(value);
}

printValue('Hello'); // 输出: Hello
printValue(42); // 输出: 42
备注

typeinterface 都可以用来定义对象类型,但它们有一些细微的区别。interface 更适合用于定义对象的形状,而 type 更适合用于定义联合类型、交叉类型等复杂类型。

enum

enum 关键字用于定义枚举类型。枚举类型允许你为一组数值赋予更有意义的名称。

typescript
enum Color {
Red,
Green,
Blue,
}

let color: Color = Color.Green;
console.log(color); // 输出: 1
警告

枚举类型在 TypeScript 中是双向映射的,即你可以通过名称获取值,也可以通过值获取名称。

as

as 关键字用于类型断言。当你比 TypeScript 更清楚某个值的类型时,可以使用类型断言来告诉 TypeScript 该值的类型。

typescript
let someValue: any = 'this is a string';
let strLength: number = (someValue as string).length;

console.log(strLength); // 输出: 16
注意

类型断言不会改变变量的实际类型,它只是告诉 TypeScript 编译器你确信该变量的类型。

typeof

typeof 关键字用于获取变量的类型。它在 TypeScript 中常用于类型保护。

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 关键字用于获取对象类型的键的联合类型。它常用于与泛型一起使用,以确保类型安全。

typescript
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

实际案例

使用 interfacetype 定义复杂类型

假设你正在开发一个电商应用,需要定义一个商品类型。你可以使用 interfacetype 来定义商品的属性和分类。

typescript
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 来定义这些状态。

typescript
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: 尝试使用 interfacetype 定义一个用户类型,包含 nameemailage 属性。
  • 练习 2: 使用 enum 定义一个表示星期几的枚举类型,并编写一个函数根据输入的星期几返回相应的活动安排。
提示

更多关于 TypeScript 的学习资源,可以参考 TypeScript 官方文档.