江城开朗的豌豆:个人主页
个人专栏 :《 VUE 》 《 javaScript 》
个人网站 :《 江城开朗的豌豆 》
⛺️ 生活的理想,就是为了理想的生活 !
目录
接口
类
在 TypeScript 中,接口(Interfaces)和类(Classes)是实现面向对象编程(Object-Oriented Programming,OOP)的基础工具。这些工具提供了一种方式来定义和组织复杂的数据结构和行为。
TypeScript 是一种静态类型的编程语言,它在 JavaScript 的基础上添加了类型系统和一些其他特性。在 TypeScript 中,接口(Interface)和类(Class)是非常重要且常用的概念。
接口(Interface): 接口是用来描述对象的形状和结构的,它定义了对象应具有的属性和方法。使用接口可以使代码更加清晰、可读性更高,并确保对象具备所需的属性和方法。
示例:
interface Person {
name: string;
age: number; greet(): void;
}
class Student implements Person {
name: string; age: number;
constructor(name: string, age: number) {
this.name = name; this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`); } } const student = new Student("John", 20);
student.greet(); // 输出:Hello, my name is John and I'm 20 years old.
在上面的示例中,定义了一个
Person
接口,它规定了对象应具有name
和age
属性,以及greet
方法。然后创建了一个Student
类实现了Person
接口,构造函数接收name
和age
参数并赋值给类的属性。并且Student
类必须实现Person
接口中定义的greet
方法。
类(Class): 类是一种面向对象编程的基本概念,它是对象的蓝图,定义了对象的属性和方法。在 TypeScript 中,类可以包含构造函数、属性、方法、访问修饰符等。
示例:
class Animal {
protected name: string;
constructor(name: string) {
this.name = name; }
move(distance: number = 0) {
console.log(`${this.name} moved ${distance} meters.`); } }
class Dog extends Animal { bark() {
console.log(`${this.name} is barking.`);
} } const dog = new Dog("Max");
dog.move(10);
// 输出:Max moved 10 meters. dog.bark(); // 输出:Max is barking.
在上面的示例中,定义了一个 Animal
类,它有一个 name
属性和一个 move
方法。另外创建了一个 Dog
类继承自 Animal
类,并添加了一个 bark
方法。注意在 Animal
类中,name
属性使用了 protected
访问修饰符,表示该属性可以在继承类中访问,但在类外部不可访问。
接口在 TypeScript 中扮演着关键的角色,用于强类型系统的支持。接口可以描述对象的形状,使我们可以编写出预期的行为。接口可用于描述对象、函数或者类的公共部分。
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj);
在这个例子中,
LabelledValue
接口就像一个名片,告诉其他代码,只要一个对象有label
属性,并且类型为string
,那么就可以认为它是LabelledValue
。接口也可以描述函数类型:
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(src: string, sub: string): boolean {
let result = src.search(sub);
return result > -1;
}
此外,接口还能用于描述数组和索引类型:
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
interface Dictionary {
[index: string]: string;
}
let myDict: Dictionary;
myDict = { "key": "value" };
与传统的 JavaScript 一样,TypeScript 也使用类(Classes)来定义对象的行为。然而,TypeScript 的类具有一些额外的特性,如访问修饰符(Access Modifiers)、静态属性(Static Properties)、抽象类(Abstract Classes)等。
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
TypeScript 还引入了访问修饰符 public
、private
和 protected
。如果没有指定访问修饰符,则默认为 public
。
class Animal {
private name: string;
constructor(theName: string) { this.name = theName; }
}
TypeScript 类还支持继承,通过extends
关键字可以创建一个子类。子类可以访问和改变父类的属性和方法:
class Animal {
name: string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Dog extends Animal {
constructor(name: string) { super(name); }
bark() {
console.log('Wo
of! Woof!');
}
}
const dog = new Dog('Tom');
dog.bark();
dog.move(10);
dog.bark();
为了实现多态,TypeScript 提供了抽象类的概念。抽象类是不能被实例化的类,只能作为其他类的基类。抽象类中可以定义抽象方法,抽象方法必须在派生类中实现:
abstract class Animal {
abstract makeSound(): void;
move(): void {
console.log('roaming the earth...');
}
}
class Dog extends Animal {
makeSound() {
console.log('Woof! Woof!');
}
}
const myDog = new Dog();
myDog.makeSound();
myDog.move();