当前位置: 首页 > article >正文

Typescript语言学习入门教程二

在TypeScript 语言学习入门级教程一中,我们已经对 TypeScript 的基本数据类型、变量声明、函数等基础概念有了一定的了解。本教程将在此基础上,深入探讨 TypeScript 的接口、类以及泛型等重要特性,帮助大家进一步提升对 TypeScript 的掌握程度,以便更好地应用于实际项目开发中。

一、接口(Interfaces)

接口在 TypeScript 中用于定义对象的结构和形状,它描述了一个对象应该具有哪些属性和方法,以及这些属性和方法的类型。

  1. 基本接口定义

例如,我们定义一个简单的接口来描述一个人的信息:
interface Person {
name: string;
age: number;
sayHello(): void;
}
在上述代码中,Person 接口规定了一个对象必须包含 name(字符串类型)和 age(数字类型)两个属性,以及一个名为 sayHello 的无返回值方法。

然后我们可以创建一个符合该接口的对象:
let john: Person = {
name: “John”,
age: 30,
sayHello() {
console.log(Hello, my name is ${this.name} and I'm ${this.age} years old.);
}
};
2. 接口的可选属性

有时候,一个对象的某些属性可能是可选的。我们可以使用 ? 符号来定义可选属性。例如:
interface Car {
brand: string;
model: string;
year?: number;
}

let myCar: Car = {
brand: “Toyotas”,
model: “Corolla”
};
在这个例子中,Car 接口的 year 属性是可选的,所以我们在创建 myCar 对象时可以不提供 year 属性的值。

  1. 接口的继承

接口之间可以相互继承,这有助于代码的复用和扩展。例如:
interface Shape {
color: string;
}

interface Rectangle extends Shape {
width: number;
height: number;
}

let rectangle: Rectangle = {
color: “blue”,
width: 10,
height: 20
};
这里 Rectangle 接口继承了 Shape 接口,所以 Rectangle 类型的对象不仅要有 width 和 height 属性,还要有 color 属性。

二、类(Classes)

TypeScript 支持面向对象编程中的类和继承,类是一种将数据和操作数据的方法组合在一起的结构。

  1. 类的基本定义

以下是一个简单的类的定义示例:
class Animal {
name: string;

constructor(name: string) {
this.name = name;
}

makeSound(): void {
console.log(“Some generic animal sound”);
}
}
在这个例子中,Animal 类有一个 name 属性和一个 constructor 构造函数用于初始化 name 属性,还有一个 makeSound 方法。

我们可以创建 Animal 类的实例:
let myAnimal = new Animal(“Lion”);
myAnimal.makeSound();
2. 类的继承

类可以继承其他类,子类可以继承父类的属性和方法,并可以进行扩展或重写。例如:
class Dog extends Animal {
constructor(name: string) {
super(name);
}

makeSound(): void {
console.log(“Woof! Woof!”);
}
}

let myDog = new Dog(“Buddy”);
myDog.makeSound();
这里 Dog 类继承自 Animal 类,它重写了 makeSound 方法,以发出狗特有的叫声。

  1. 类的访问修饰符

TypeScript 提供了三种访问修饰符:public(默认,可在任何地方访问)、private(只能在类内部访问)和 protected(在类内部和子类中可访问)。例如:
class BankAccount {
private balance: number;

constructor(initialBalance: number) {
this.balance = initialBalance;
}

public deposit(amount: number): void {
this.balance += amount;
}

protected getBalance(): number {
return this.balance;
}
}

let myAccount = new BankAccount(1000);
myAccount.deposit(500);
// console.log(myAccount.balance); // 错误,不能访问 private 成员
// console.log(myAccount.getBalance()); // 错误,不能在类外部访问 protected 成员
在这个 BankAccount 类中,balance 属性被声明为 private,只能在类内部被访问和修改。deposit 方法被声明为 public,可以在类外部被调用。getBalance 方法被声明为 protected,只能在类内部和子类中被访问。

三、泛型(Generics)

泛型是 TypeScript 中一种强大的特性,它允许我们编写可复用的代码,能够适用于多种不同类型的数据,而不是针对特定的类型。

  1. 简单泛型函数

例如,我们定义一个函数来返回数组中的第一个元素:
function getFirstElement(arr: T[]): T {
return arr[0];
}

let numbers = [1, 2, 3];
let firstNumber = getFirstElement(numbers);

let strings = [“Hello”, “World”];
let firstString = getFirstElement(strings);
在这个函数中,T 是一个泛型类型参数,它代表了数组中元素的类型。函数可以接受任何类型的数组,并返回该数组的第一个元素,其类型与数组元素类型相同。

  1. 泛型类

我们也可以定义泛型类。例如,一个简单的泛型栈类:
class Stack {
private items: T[] = [];

push(item: T): void {
this.items.push(item);
}

pop(): T | undefined {
return this.items.pop();
}
}

let numberStack = new Stack();
numberStack.push(1);
numberStack.push(2);
let poppedNumber = numberStack.pop();

let stringStack = new Stack();
stringStack.push(“A”);
stringStack.push(“B”);
let poppedString = stringStack.pop();
在 Stack 类中,T 代表栈中元素的类型,这样我们可以创建不同类型元素的栈实例。

通过本教程的学习,我们对 TypeScript 的接口、类和泛型有了深入的了解。这些特性在构建复杂的应用程序、提高代码的可维护性和复用性方面具有非常重要的作用。继续深入学习和实践 TypeScript 的其他高级特性,将有助于你成为一名更优秀的前端或全栈开发者。

如果在学习过程中有任何疑问或建议,欢迎留言交流。


http://www.kler.cn/a/418161.html

相关文章:

  • model.zero_grad() 和 self.optimizer.zero_grad() 区别
  • 基础Web安全|SQL注入
  • Spring源码-Bean的生命周期和模板方法
  • Attention显存统计与分析
  • uniapp中父组件调用子组件方法
  • spring-boot-maven-plugin 标红
  • windows10桌面鼠标右键出现卡顿解决方法 - 副本
  • Linux笔记---进程:进程等待
  • 洛谷 P10491 [USACO09NOV] The Chivalrous Cow B C语言 bfs
  • Flink双流Join
  • # issue 6 网络编程基础
  • 力扣 全排列-46
  • 【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒
  • 玩转Docker | 使用Docker部署MediaCMS内容管理系统
  • 自动化检测三维扫描仪-三维扫描仪检测-三维建模自动蓝光测量系统
  • Aes加解密
  • WEB攻防-通用漏洞XSS跨站MXSSUXSSFlashXSSPDFXSS
  • 如何使用Python解析从淘宝API接口获取到的JSON数据?
  • DPDK用户态协议栈-Tcp Posix API 1
  • 如何使用git fetch与git pull,在团队协作中二者有什么区别,具体案例分析并深入理解
  • AI开发-深度学习框架-PyTorch-torchnlp
  • 【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道
  • 声音克隆技术:探索与实践 —— 从GPT-SoVITS V2到未来趋势20241201
  • 进程状态的学习
  • 【Qt中实现屏幕录制】
  • 用Leangoo领歌敏捷看板工具管理跨境电商物流出运的流程