【TypeScript学习】TypeScript基础学习总结二

server/2024/10/20 11:01:23/

主要记录ts中的类、接口与泛型

1.类

无论是在哪种语言中,类都是面向对象编程(OOP)的一个主要实现方式。能够实现代码更加灵活,更具有结构化。类作用都是提供一个模板,通过类可以创建多个具有相同结构的对象。

typescript">// 类的定义,与对象的声明
class Student {id: stringname: stringage: numberconstructor(id:string, name:string, age:number) { // 构造器this.id = idthis.name = namethis.age = age}speak() {console.log('I am a student, my name is' + this.name);}
}
let stu1 = new Student('0001','小王', 18)
let stu2 = new Student('0002','小刘', 19)
let stu3 = new Student('0003','小李', 20)
  • 类的继承
typescript">// 类的继承
class SeniorStudent extends Student { // 继承父类grade:stringconstructor(id:string, name:string, age:number,grade:string) {super(id, name, age) // 通过super把父类需要的参数传入this.grade = grade}override speak(): void { // 重写speak方法console.log('I am a senior student, I am '+ this.name + ', i am in grade '+this.grade);}
}
let sen1 = new SeniorStudent('0007', '小L', 18, '高三')
sen1.speak() // I am a senior student, I am 小L, i am in grade 高三
  • 类属性的修饰符

    • public:使用public修饰的成员属性或者成员方法既能在自身类中和子类调用也能在类外部调用;
    • private:使用private修饰的成员属性或者成员方法只能在自身类中调用;
    • protected:使用protect修饰的成员属性或者成员方法只能在自身类中和子类调用,不能在类外部调用;
    • readonly:使用readonly修饰的成员属性无法修改。
  • 抽象类和抽象方法

抽象类用abstract来修饰。抽象类的作用是为派生类提供一个基础结构,抽象类可以被继承不能被实例化。抽象类中的方法可以是抽象方法(用abstract修饰),也可以是普通方法。其中的抽象方法一定要被派生类实现。

typescript">// 抽象类
abstract class Cup{shape: string;price: number;private readonly resource: stringconstructor(shape:string, price:number, resource:string) {this.shape = shapethis.price = pricethis.resource = resource}getInfo() {console.log('Infos: shape is ' + this.shape+ 'resource is ' + this.resource + 'price is ' + this.price );}abstract changePrice(val:number): void //抽象函数不能够实现具体功能,只能声明参数你返回值
}class glassCup extends Cup {constructor(shape: string, price:number, resource:string, private volumn:number) {super(shape, price, resource)}changePrice(val: number): void {this.price = this.price - valconsole.log('the price change to ' + this.price);}
}

思考: 在实践这段代码的时候,我有个小想法。之前函数定义的方法有下面这种格式的,表示: 声明一个函数,函数名为countSum, 并且指定形参和形参类型,同时通过=>指定返回值类型。这种形式的函数声明也是一个声明方式,没有实际实现,那么我是否可以用这种方式来定义抽象类中的抽象方法呢?

    1. 我不知道abstract关键字加在哪
    1. 在代码中尝试写了不加abstract关键字的格式,代码报错
typescript">let countSum :(x:number, y:number)=>number

上面这种格式只适用于函数声明,不适用于类方法

2.接口

接口是用于规范类、函数、对象的结构。接口只能定义格式,不能像类一样被实现。通过关键词implement调用接口。

typescript">// 类
interface ComputerInterface {id: string;brand: string;exture: string;price: number;start(): void; // 可以规定要有这个函数,但是不能具体实现这个函数
}class ASUS implements ComputerInterface {constructor( // 类的简写形式,将属性在构造器里面声明,需要写明修饰符public id: string,public brand: string,public exture: string,public price: number) {}start(): void {console.log(this.brand + 'is starting....');}
}
let asus1 = new ASUS('0001', '华硕', '轻薄本', 5000)

接口规范对象,注意写法

typescript">//接口规范对象
interface ObjectInterface {name: stringage: numbergender?:string // 可选
}let obj1: ObjectInterface = { // 注意写法name: 'no_name',age: 18
}

定义函数规范,写法跟对象类似,也在写这个过程中感受到了ts的一些特点,比如:必须先声明res且定义其为空字符才能进行后面的相加和赋值;

typescript">// 接口定义函数的规范
interface FunInterface {(a:string, b:number):string
}
let printString: FunInterface = (a: string, n: number) => {let res = ''for (let i = 0; i < n; i++) res = res + areturn res// return a.repeat(n)
}

接口也可以继承。接口还能够合并,在某个地方定义接口a后,继续又定义了接口a并写了新的属性,两个接口会合并成一个


http://www.ppmy.cn/server/125972.html

相关文章

kubernetes的网络

kubernetes网络模型 Kubernetes采用的是基于扁平地址空间的网络模型&#xff0c;集群中的每个Pod都有自己的IP地址&#xff0c;Pod之间不需要配置NAT就能直接通信&#xff0c;同一个Pod中的容器共享Pod的IP&#xff0c;能够通过localhost通信Pod容器内的通信 当Pod被调度到某个…

计算机网络:计算机网络概述 —— 初识计算机网络

文章目录 计算机网络组成部分网络架构协议与标准网络设备网络类型作用实际应用案例 计算机网络 计算机网络是指将多台计算机通过通信设备和通信链路连接起来&#xff0c;以实现数据和信息的交换和共享的技术和系统。它是现代信息社会的基础设施之一&#xff0c;也是互联网的基…

【数据结构】堆(Heap)详解

在深入了解堆这一重要的数据结构之前&#xff0c;不妨先回顾一下我之前的作品 ——“二叉树详解”。 上篇文章&#x1f449;剖析二叉树&#xff08;Binary Tree&#xff09; 二叉树作为一种基础的数据结构&#xff0c;为我们理解堆以及其他更复杂的数据结构奠定了坚实的基础。它…

Leetcode 环形链表

java 代码&#xff1a; /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public boolean hasCycle(ListNode head) {//初始…

使用 Nginx 和 Gunicorn 部署 Flask 项目详细教程

使用 Nginx 和 Gunicorn 部署 Flask 项目详细教程 在这篇文章中&#xff0c;我们将介绍如何使用 Nginx 和 Gunicorn 来部署一个 Flask 项目。这种部署方式非常适合在生产环境中使用&#xff0c;因为它能够提供更好的性能和更高的稳定性。 目录 Flask 项目简介环境准备Gunico…

【分布式微服务云原生】使用Docker体验不同Linux发行版

Docker 允许用户在同一个宿主机上运行多种不同的Linux发行版&#xff0c;而共享同一个宿主机内核。这种方式不仅节省资源&#xff0c;还非常方便进行环境测试和开发。 1. Docker与Linux发行版 Linux内核 发行版 Linux内核与各种发行版软件包组合&#xff0c;构成了一个完整的…

Docker精讲:基本安装,简单命令及核心概念

docker服务部署 docker是一个容器管理工具&#xff0c;其内部容器才是具体服务&#xff0c;所以我们在安装docker时不需要有太多定制内容&#xff0c;只需要通过yum安装即可 1. 更新系统包 #更新现有依赖包&#xff0c;防止现有依赖包版本过低影响docker安装 yum update2. 安…

k8s 分布式存储平台 -- Longhorn

文章目录 一、什么是 Longhorn二、架构设计1、工作原理2、工作流程3、基于微服务设计的优势 三、安装1、安装要求2、使用 Longhorn 命令行工具&#xff08;验证方式一&#xff09;3、使用环境检查脚本&#xff08;验证方式之二&#xff09;3.1、安装 jq3.2、运行脚本 4、安装 o…