对TS里接口、extends和类的理解

简介: 对TS里接口、extends和类的理解

对TS里接口和类的理解

接口

  • 需求: 创建人的对象, 需要对人的属性进行一定的约束

  • 下面通过一个简单示例来观察接口是如何工作的:

/* 
在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型
接口: 是对象的状态(属性)和行为(方法)的抽象(描述)
接口类型的对象
    多了或者少了属性是不允许的
    可选属性: ?
    只读属性: readonly
*/

/* 
需求: 创建人的对象, 需要对人的属性进行一定的约束
  id是number类型, 必须有, 只读的
  name是string类型, 必须有
  age是number类型, 必须有
  sex是string类型, 可以没有
*/

// 定义人的接口
interface IPerson {
   
  id: number
  name: string
  age: number
  sex: string
}

const person1: IPerson = {
   
  id: 1,
  name: 'tom',
  age: 20,
  sex: '男'
}
  • 应用
  • 定义一个Person 接口,它来描述一个拥有 firstName 和 lastName 字段的对象,这两个元素的值均为string类型。(对函数 greeterinterface 的参数person对象的元素类型进行了限制。)
interface Person {
   
    firstName: string;
    lastName: string;
}

const greeterinterface = (person: Person) => {
   
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = {
    firstName: "Jane", lastName: "User" };

console.log(greeterinterface(user))
  • 在项目里使用,例如调一个接口你需要传一个object给后端,这个object的元素有name,age,height,我们可以通过接口来对object值统一进行一个限制,name必须是string,age和height必须是number,否则就报错,这样会使代码更加严谨。

    extends 关键字

在 TypeScript 中,通过 extends 关键字可以实现接口的继承。即用一个接口来扩展另一个接口的成员。这样可以避免重复定义或者让接口更加灵活。

interface Shape {
   
  name: string;
  area(): number;
}

interface Circle extends Shape {
   
  radius: number;
}

class MyCircle implements Circle {
   
  name = "My Circle";
  radius = 10;
  area() {
   
    return Math.PI * Math.pow(this.radius, 2);
  }
}

const myCircle = new MyCircle();
console.log(myCircle.name); // "My Circle"
console.log(myCircle.area()); // 314.1592653589793

在上述代码中,定义了两个接口Shape和Circle。

接口Shape定义了name和area两个属性。

接口Circle继承了Shape接口(Circle也拥有了来自Shape接口的两个属性),并增加了radius属性

这就是 extends的使用,用于继承,并且在继承属性的基础上又新增了自己的属性

接下来,通过class关键字定义了一个MyCircle类,这个类通过接口继承,实现了接口的组合和复用。

  • 在 TypeScript 中,类是面向对象编程的基础,它是一种抽象和封装了数据和行为的结构。类具有属性和方法,通常用于创建对象

  • 下面是一个简单的 TypeScript 类的示例:

class Person {
   
  name: string;
  age: number;

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

  sayHello() {
   
    console.log(`Hello, my name is {
   mathJaxContainer[0]}{
   this.age} years old.`);
  }
}

const person = new Person("Tom", 18);
person.sayHello();

上面的代码中,定义了一个 Person 类,其中包括 name 和 age 两个属性,以及 sayHello 方法。在 constructor 构造函数中,通过 this关键字来初始化 name 和 age 两个属性。sayHello 方法用于输出 Person 对象的信息。

在最后的代码中,创建了一个名为 person 的 Person 对象,调用其 sayHello 方法,输出 Hello, my name is Tom and I am 18 years old.。

目录
相关文章
|
3月前
ts中interface和type的区别
ts中interface和type的区别
135 21
|
5月前
|
存储 JavaScript 前端开发
ES6 class 类
【7月更文挑战第27天】
26 1
|
7月前
|
JavaScript
TS中 type和interface的区别
TS中 type和interface的区别
827 0
|
7月前
|
JavaScript 前端开发 索引
TS - interface和type的区别
TS - interface和type的区别
90 0
|
JavaScript 前端开发
ts - 类
TypeScript支持JavaScript的新特性,比如支持基于类的面向对象编程。让我们创建一个Student类,它带有一个构造函数和一些公共字段。 注意类和接口可以一起工作。
【TS】ts中的类:class
【TS】ts中的类:class
141 0
【TS】ts中的类:class
|
JavaScript 编译器 开发者
ts的接口是什么有什么作用
ts的接口是什么有什么作用
371 0
|
存储 JavaScript
【TS】class类和接口
【TS】class类和接口
119 0
下一篇
DataWorks