两小时快速入门 TypeScript 基础(二)面向对象

news2024/11/19 1:48:03

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端(Node.js 等)
📃个人状态: 2023届本科毕业生,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力 n 年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js 🍖JS版算法
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

TypeScript入门

内容参考链接
TypeScript(零) —— 简介、环境搭建、第一个实例搭建开发环境
TypeScript 基础(一)工作流、基本类型、高级类型工作流、基本类型、高级类型

文章目录

  • TypeScript入门
    • TypeScript 面向对象
      • object 对象类型
      • Interface 接口
      • class 类
      • Access Modifier 访问修饰符
      • module 模块
      • Generics 泛型
    • 本章小结


TypeScript 面向对象

object 对象类型

不同于 JavaScript 对象的 key-value 键值对,TypeScript 为 key-type 键类型对。一般不在 person 后面使用 : object,因为使用后 person 就相当于一个 {},这样的话我们获取 person.age 都会报错,因为根本获取不到。

const person = {
    firstName: "前端",
    lastName: "杂货铺",
    age: 22
}

在这里插入图片描述

Interface 接口

给参数对象做限制,可以使得业务和逻辑更加清晰。

在这里插入图片描述

class 类

简单的讲,class 类就是紧密相关的属性和函数的结合。

我们创建一个接口 IPoint,在里面对坐标点和方法进行一些限制。之后我们创建 Point 类,让它实现接口 IPoint,在里面定义成员变量、构造函数和成员方法。再之后,我们创建 point 实例,通过该实例调用方法。

interface IPoint {
	// 坐标点
    x: number;
    y: number;
    // 打印当前坐标点信息的函数,不需要接受参数,没有返回值
    drawPoint: () => void;
    // 获取距离的函数,传入对方的点信息的参数,输出的是数字
    getDistances: (p: IPoint) => number;
}

// Point类 实现的接口是 IPoint
class Point implements IPoint {
    // 成员变量
    x: number;
    y: number;
    // 构造函数
    constructor(x: number, y: number) {
        this.x = x;
        this.y = y;
    }
    // 成员方法
    drawPoint = () => {
        console.log('x: ', this.x, ' y: ', this.y);
    };
    getDistances = (p: IPoint) => {
        return Math.pow(p.x - this.x, 2) + Math.pow(p.y - this.y, 2)
    };
}

const point = new Point(2, 3)
point.drawPoint()

在这里插入图片描述

Access Modifier 访问修饰符

当我们希望避免外界直接操作 class 内部的属性,这个时候我们就需要访问修饰符对访问 class 内部的方法或者是变量加以限制。

访问修饰符:public(默认)、private、protected【公有、私有、受保护】

下面,我们使用 set 和 get 的两种方式对私有变量进行赋值和读取。

interface IPoint {
    // 打印当前坐标点信息的函数,不需要接受参数,没有返回值
    drawPoint: () => void;
    // 获取距离的函数,传入对方的点信息的参数,输出的是数字
    getDistances: (p: IPoint) => number;
    // X 采用“懒人包”的写法
    X: number;
    // getX: () => number;
    // Y 保持着 set 和 get 的写法
    getY: () => number;
    // setX: (value) => void;
    setY: (value) => void;
}

// Point类 实现的接口是 IPoint
class Point implements IPoint {
    // 构造函数
    constructor(private x: number, private y: number) {
    
    }
    // 成员方法
    drawPoint = () => {
        console.log('x: ', this.x, ' y: ', this.y);
    };
    getDistances = (p: IPoint) => {
        return Math.pow(p.X - this.x, 2) + Math.pow(p.getY() - this.y, 2)
    };
    set X(value: number) {
        if (value < 0) {
            throw new Error('value不能小于0')
        }
        this.x = value
    };
    get X() {
        return this.x
    };
    setY = (value: number) => {
        if (value < 0) {
            throw new Error('value不能小于0')
        }
        this.y = value
    };
    getY = () => {
        return this.y
    };
}

const point = new Point(24, 50)
point.X = 10
console.log(point.X)
point.setY(8)
console.log(point.getY())

在这里插入图片描述

module 模块

TS 的模块和 JS 的模块没有什么区别,就是把一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起;块的内部数据与实现是私有的,只是向外部暴露一些接口(方法)与外部其它模块通信。

我们对上面的程序进行模块化拆分,分成 point.ts 和 main.ts

point.ts 中,我们使用 export 关键字导出类

interface IPoint {
    // 打印当前坐标点信息的函数,不需要接受参数,没有返回值
    drawPoint: () => void;
    // 获取距离的函数,传入对方的点信息的参数,输出的是数字
    getDistances: (p: IPoint) => number;
    // X 采用“懒人包”的写法
    X: number;
    // getX: () => number;
    // Y 保持着 set 和 get 的写法
    getY: () => number;
    // setX: (value) => void;
    setY: (value) => void;
}

// Point类 实现的接口是 IPoint
export class Point implements IPoint {
    // 构造函数
    constructor(private x: number, private y: number) {
        // this.x = x;
        // this.y = y;
    }
    // 成员方法
    drawPoint = () => {
        console.log('x: ', this.x, ' y: ', this.y);
    };
    getDistances = (p: IPoint) => {
        return Math.pow(p.X - this.x, 2) + Math.pow(p.getY() - this.y, 2)
    };
    set X(value: number) {
        if (value < 0) {
            throw new Error('value不能小于0')
        }
        this.x = value
    };
    get X() {
        return this.x
    };
    setY = (value: number) => {
        if (value < 0) {
            throw new Error('value不能小于0')
        }
        this.y = value
    };
    getY = () => {
        return this.y
    };
}

在 main.ts 中我们使用 import 关键字导入类

import { Point } from './point'

const point = new Point(24, 50)
point.X = 10
console.log(point.X)
point.setY(8)
console.log(point.getY())

在这里插入图片描述

Generics 泛型

泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。

类型+<> 这种表达方式就是泛型

let list: Array<number> = [1, 2, 3]
// 泛型的表达方式
let lastInArray = <T>(arr: T[]) => {
    return arr[arr.length - 1]
}

const l1 = lastInArray([1, 2, 3, 4])
const l2 = lastInArray(['a', 'b', 'c'])
const l3 = lastInArray<string | number>(['a', 'b', 'c'])

// 多泛型的表达方式
let makeTuple = <T, Y>(x: T, y: Y) => [x, y]

const v1 = makeTuple(1, 'one')
const v2 = makeTuple<boolean, number>(true, 1)

本章小结

本篇文章介绍了 TypeScript 中面向对象的内容,注意 TS 的对象类型是 key-type 而非 key-value。

对于 Interface 接口,我们可以把它看成一种约定,我们类的实现要遵守它。

访问修饰符分为 public、private、protected 三种,当使用 private 私有修饰符时要想在外面修改或获取到某个属性,可以使用 set 和 get 方法。

Generics 泛型,我们有着约定俗成的写法,它允许我们编写代码时使用一些以后才指定的类型。

TS 入门暂告一段落,三篇文章不可能把 TS 的全部知识点都陈列,更多的 TS 知识请大家自行学习探讨…


参考资料:

  1. 模块化的作用 【作者:Leah】
  2. 泛型·百度百科
  3. TypeScript 入门讲解 【作者:阿莱克斯刘】

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实战】 二、React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表1.新建文件2.状态提升3.新建utils4.Custom Hook 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&#xff08;2023.0…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第十二天 12/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

服务运营|MS 论文解读:MIR 增强的Benders 分解用于具有到达率不确定性的多类服务系统人员调度问题

推文作者&#xff1a;王畅&#xff0c;蔡君洋&#xff0c;Guo 编者按 劳动力调度是服务系统运营的一个重要应用场景&#xff0c;当系统中的服务集和客户集异构且客户到达率不确定时&#xff0c;劳动力调度问题会变得特别复杂。本文因此引入了一个两阶段的随机整数规划模型&…

【静态单元格 Objective-C语言】

一、预习QQ动态 1.我们今天,是三、到四个任务,第一个任务,就是这个,预习QQ动态 OK,看到这个效果了吗 这是咱们第一个任务,第一个任务,是实现这么一个效果, 一看这个,就肯定是个啥,UITableView吧, 是不是肯定是一个TableView啊 又能滚动,又能显示一行一行的数据…

Qt QGraphicsScene、QGraphicsView类实现仪表盘

Qt QGraphicsScene、QGraphicsView类实现仪表盘 【1】UI界面设计【2】效果【3】QGraphicsScene简介【4】QGraphicsEllipseItem简介【5】QGraphicsPolygonItem简介【6】QGraphicsLineItem简介【7】QGraphicsView简介【8】仪表源码头文件源码 【1】UI界面设计 【2】效果 【3】QGr…

OpenStack(T版)——对象存储(Swift)服务介绍与安装

文章目录 OpenStack(T版)——对象存储(Swift)服务介绍与安装安装和配置(controller)准备安装和配置Swift对象存储服务组件创建账户 Ring创建容器 Ring创建对象 RingSwift 存储系统的主配置文件修改文件属主 安装和配置(compute)准备配置Swift对象存储服务组件 验证(1)加载环境变…

《程序员的AI书_从代码开始》第二章 手工实现神经网络

文章目录 2.1 感知器2.1.1 从神经元到感知器2.1.2 实现简单的感知器 2.1 感知器 2.1.1 从神经元到感知器 2.1.2 实现简单的感知器 class Perception(object):def __init__(self,eta0.01,iterations10):self.lr etaself.iterations iterationsself.w 0.0self.bias 0.0sel…

Red Hat宣布限制访问源代码,尚有两种方式可获取

日前Red Hat宣布限制访问Red Hat Enterprise Linux(RHEL)源代码&#xff0c;而此举也将影响AlmaLinux 、Rocky Linux 等下游发行版。 随即Rocky Linux发布了名为《Keeping Open Source Open》的博文。文中是这样说的&#xff1a;    Red Hat的**ERP**服务条款 (TOS) 和最终…

dotnet-dump/trace

一、dotnet-dump dotnet tool install -g dotnet-dump ps -ef | grep dotnet export PATH$PATH:$HOME/.dotnet/tools dotnet-dump collect --process-id 31555 #等待最后出输出&#xff1a;Writing full to /root/core_20230701_095230 #分析/root/core_20230701_095230文件 d…

【doxygen】支持 markdown 目录

文章目录 创建章节和子章节配置 doxygen Doxygen 不直接支持 Markdown 的 [toc] 语法。但是&#xff0c;你可以通过以下步骤手动创建目录&#xff1a; 创建章节和子章节 在 Markdown 文件中&#xff0c;使用标题标记&#xff08; # &#xff09;来创建章节和子章节。 Note:…

D2L运行环境问题+anaconda 多环境

环境问题 背景&#xff1a; 换了电脑&#xff0c;当前的电脑原先就装着Python3.9.0 直接pip install d2l & torch can work but when i start the jupyter, it use the anaconda SDK which is 3.6.4 so i need to install the d2l& torch under anaconda python sdk b…

第二章:Fast R-CNN网络详解

(目标检测篇&#xff09;系列文章目录 第一章:R-CNN网络详解 第二章:Fast R-CNN网络详解 第三章:Faster R-CNN网络详解 第四章:YOLO v1网络详解 第五章:YOLO v2网络详解 第六章:YOLO v3网络详解 文章目录 系列文章目录技术干货集锦前言一、摘要二、正文分析 1.引入库2.读…

10个最好的免费PDF阅读器清单分享

PDF&#xff08;便携式文档格式&#xff09;已成为数字文档分发和共享的事实上的标准。要高效地查看、注释和编辑 PDF 文件&#xff0c;可靠的 PDF 阅读器至关重要。在这篇综合文章中&#xff0c;我们将探讨当今可用的前 10 款 PDF 阅读器&#xff0c;评估它们的功能、可用性和…

网工内推 | 云平台运维专场,IE认证优先

01 中科创达 招聘岗位&#xff1a;云平台运维 职责描述&#xff1a; 1、驻场在客户单位处办公&#xff0c;负责H3C品牌的网络、安全、存储、云平台、服务器等软硬件设备的运行监控与管理&#xff0c;包括日常巡检、日常维护等工作&#xff1b; 2、技术支持&#xff0c;为客户…

各牌浏览器设置地址栏显示完整URL

有时候&#xff0c;我们在浏览器的地址栏输入URL后&#xff0c;需要查看完整的URL路径&#xff0c;比如想看到是http协议还是https协议。 目前大多数浏览器都直接将协议头隐藏&#xff0c;需要复制出地址&#xff0c;或者点击地址栏才能看到&#xff0c;比较麻烦。 浏览器支持通…

碳排放预测模型 | Python实现基于LR线性回归和MPR多项式回归的碳排放预测模型

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于LR线性回归和MPR多项式回归的碳排放预测模型 研究内容 预测碳排放 查看汽车模型的数据集并预测其碳排放量。 在这里,使用线性回归和多项式回归进行预测,以找出哪个模型更…

【Python爬虫】Python爬虫三大基础模块(urllib BS4 Selenium)

【Python爬虫】Python爬虫三大基础模块&#xff08;urllib & BS4 & Selenium&#xff09; 文章目录 【Python爬虫】Python爬虫三大基础模块&#xff08;urllib & BS4 & Selenium&#xff09;一、Python爬虫的基本知识1、网络爬虫是什么&#xff1f;1&#xff0…

phpstudy nginx的解析漏洞分析

然后加入/.php 成功执行phpinfo(); 漏洞分析 这是我的生产环境,根据漏洞特性&#xff0c;大概率就是fastcgi的问题。 查看该站点相关的nginx的配置文件 可见 这里的正则处理,将文件传递给fastcgi处理&#xff0c;$fastcgi_script_name会被设置为1.png/.php&#xff0c;然后构…

kafka入门,Leader Partition 负载平衡(十五)

Leader Partition自动平衡 正常请款下&#xff0c;kafka本身会自动把Leader Partition均匀分散在个个机器上&#xff0c;来保证每台机器的读写吞吐量都是均匀的&#xff0c;但是如果某些broker宕机&#xff0c;会导致Leader partition过于集中在其他少部分几台broker上&#xf…

记录 Linux centos 安装tomact遇到的问题

如果在安装时 觉得自己什么都安装好了&#xff0c;什么也设置好了&#xff0c;包括阿里云的安全组&#xff0c;但是依旧不能进行访问Tomact的主页&#xff0c;你可以查看一下 catalina.out这个文件&#xff0c;出现以下错误这表示 tomact和Java本版有冲突所以一直无法访问&…