TypeScript的数据结构 03
前言TS 是 JS 的一个超集保留JS原有语法和动态特性的基础上添加可选静态类型和基于类的面向对象编程。1. JS的面向对象编程JavaScript 是基于函数实现面向对象编程的。JS的设计者在最初就选择了和当时主流语言JAVA / C 等“基于类的模型”不同的技术路线—— “基于原型的面向对象”让对象直接从其他对象中继承而不需要抽象出“类”作为中介。1.1 面向对象实现1. JS 创建构造函数函数拥有一个prototype属性JS引擎内部进行的初始化动作prototype 属性会指向另一个对象 Person.prototype.publicFun构造函数角度构造函数 的 公共仓库Prototype 中的资源publicFun实例对象角度实例对象的原型prototype的对象隐式父对象2. 通过 new 创建实例创建一个新的空对象该实例对象的内部指针__proto__执行构造函数的prototype对象执行构造函数并将函数体的this绑定到这个新的对象中返回上述新创建的对象prototype用于存放实例 公共行为资源 的仓库减少内存浪费// Person.prototype.PublicFun function(){} var Person new Function() Person.prototype { construct: Person; publicFun: function(){console.log(自定义公共行为)} }原始数据结构的原型属性列举StringlengthslicesplittrimindexOfreplaceArraylengthpushpopmapfilterforEach内部封装迭代器concatES6Map: size, set(key, value), get(key), has(key), delete(key), clear(), keys(), values(), entries()Set: add(value)2. TS 的核心机制/规则可选静态类型 和 基于类的面向对象编程可选静态类型 编译阶段对变量的类型进行检查可以通过定义类型判断也可以通过赋值自动推导弥补JS动态类型在复杂协作和项目上造成的负担。为什么理论上TS定义参数要添加类型但是实际可不写已赋值/ 可写初始化 或 类型为any值得一提 TS 的核心优势之一 “类型推断”。那么“类型推断”的核心价值1. 优化 JS 这种动态类型语言中参数类型在开发中可任意改变的灵活性在复杂开发中易产生参数错乱的情况从而对参数类型严格监控。2. 简化 TS 代码的编写提升代码的可读性与维护性。注意编译时进行类型推断如果从接口获取了不合规的数据TS 的推断无法在浏览器运行时帮助拦截报错的需要配合运行时的校验库如 Zod 等TypeScript严格模式strict mode配置strict: true或者单独开启noImplicitAny: true基于类的面向对象编程 对比JS的动态类型且在运行时可以给原型添加属性的特点类的语法明确定义了属性、方法、访问权限等所以TS编译器分析阶段 根据类固定的结构提取出类型信息配合可选静态类型进行严格检查检查通过后编译为JS的function才能在浏览器中运行。3. TS基础数据结构类型的声明、类型的集合3.1. 基础类型boolean string number array null undefinedlet flag: boolean true let course: string caorui let grade: number 98 // undefined 和 null 只能赋值给自己或者any let u: undefined undefined let friend: null null let classArr: string[] [basic,execute] let classArr1: Arraystring [basic,execute]tuple 元组tuple 有限个数和有限类型type 无限集enum 枚举默认是数据类型枚举从零开始依次递增声明变量 any unknow声明函数的返回值 void nerver3.2. 复合类型将多个值组合成一个复杂的结构。3.2.1. 对象类型的对比object Object {}1object 引入非原始类型对象自己携带了属性通用对象的属性如 .hasOwnProperty / .toString / .valueOf类型检查通过如果遇到自定义的业务属性TS 会因为不认识将这些属性禁用所以此时就需要用到 type/interface创建类型别名使得业务属性通过TS的类型检查// 包含普通对象{}, 数组函数类实例…… let obj: object; obj { name: Alice }; obj [1, 2, 3];2Object 原始类型 非原始类型继承 JavaScript 中对象构造函数 以及原型链 的类型3{} 能接受原始类型但是不能访问属性。// 联合类型的限制作用{} 限制 value 不能是 null 或 undefined function valueDataT extends {}(value: T) { console.log(value); }3.2.2 核心类型系统interface 和 type 的理解3.2.2.1. interface实际意义核心定位定义抽象接口将核心业务逻辑和外部依赖细节隔离即业务做什么和怎么实现分离。符合“依赖倒置原则Dependence Inversion Principle”// 编译阶段只做结构校验 interface IStorage{} // 强制类实现接口定义的结构 class LocalStorage implements IStorage{}持久化存储解耦为例// “单例模式” “类型导出”模式 export type SessionToken { accessToken: string, refreshToken: string, expires: number, } // 对外暴露相同的方法和属性 export interface StorageLike{ setItem(key: string, value: string): void getItem(key: string): string | null removeItem(key: string): void } // 业务逻辑依据interface契约操作 export class TokenStore{ private storage:StorageLike constructor(storage:StorageLike){ this.storage storage } } function anotherStorage:StorageLike{} const definedStore typeof window ! undefined window.localStorage ? window.localStorage : anotherStorage export const tokenStore new TokenStore(definedStore)思考1. 对比使用 type 和 interface 定义对象类型的差异2. 解耦思想实际应用场景持久化存储网络场景时间处理等3. 内置数据结构类型有哪些TS 继承 JS 的内置对象并添加了强类型支持。比如TS 给 JS 的 Set 和 Map 增加了泛型支持Set集合ES6存储唯一值去重Map映射ES6存储键值对键值可以是任何类型TS的内置工具类型Pick、Record、Partial、Omit 等。自定义高级数据结构有哪些结合 接口 泛型 实现复杂的业务数据结构// 定义通用数据结构接口契约 interface PageResT{ list: T[], total:number}5. 内置的工具类型Pick: 从一个已有类型里挑出指定的几个字段/属性组成一个新的类型。// Storage —— Web Storage API type StorageType PickStorage, getItem|setItem|removeItem6. 类型的计算通过基础类型计算出复杂的数据结构联合类型相当于“或”运算允许数据有多种形态。交叉类型相当于“与”运算将多个结构合并为一个。存在一些变量是多种不同类型的合比如象棋的颜色/身份所以需要对多种类型进行合并—— 联合类型联合类型的存在让TS编译器在运行到某一行代码时无法确认变量的类型是 —— 引申出类型守卫ininstanceoftypeof需要对变量类型进行判断保证多种类型中选择了合适的一个。类型守卫和断言配合使用。类型守卫针对不确定的情况增加一层判断保障断言针对对系统非常熟悉的情况强行明确变量的类型as!()尖括号减少其他繁琐操作。它们结合使用确保TS编译阶段的类型检查工作。7. 类型进行动态化泛型 接收 类型参数像函数传变量值一样动态操作变量类型并返回具体的数据结构。函数存在形参和实参JavaScript中的实参只有在函数真正运行时才会知道实际参数而JS的形参 fn(10) 是无类型的所以经常写 typeof 进行检查。而 TypeScript 的 泛型针对JS中存在的问题进行了完善。泛型 通过 显式传递 / 隐式传递 将 形参的类型传递进来使得函数在运行前就已经知道参数的类型。function startClassT,U(name:T, score:U): T{ return name score } startClassstring,number(ts,5)思考TS的语法糖装饰器Java中的注解

相关新闻

Mixamo动画导入UE5全攻略:关键帧与蒙皮设置详解

Mixamo动画导入UE5全攻略:关键帧与蒙皮设置详解

1. 项目概述:从Mixamo到UE5的动画资产迁移如果你正在用UE5做角色动画,那Mixamo这个网站大概率是你的老朋友了。它提供了海量的免费角色动画资源,简直是独立开发者和小型团队的福音。但问题往往就出在“最后一公里”——当你兴冲冲地从Mixamo下…

2026/10/13 1:59:11 阅读更多 →
3分钟免费实现:让老手柄兼容现代游戏的终极指南

3分钟免费实现:让老手柄兼容现代游戏的终极指南

3分钟免费实现:让老手柄兼容现代游戏的终极指南 【免费下载链接】XOutput A small DirectInput to Xinput wrapper 项目地址: https://gitcode.com/gh_mirrors/xou/XOutput 你是否有一款经典游戏手柄,却在玩现代游戏时发现无法识别?XO…

2026/9/29 17:25:28 阅读更多 →
JsBarcode实战指南:革新JavaScript条形码生成技术

JsBarcode实战指南:革新JavaScript条形码生成技术

JsBarcode实战指南:革新JavaScript条形码生成技术 【免费下载链接】JsBarcode Barcode generation library written in JavaScript that works in both the browser and on Node.js 项目地址: https://gitcode.com/gh_mirrors/js/JsBarcode 在现代数字化业务…

2026/10/8 6:19:15 阅读更多 →

最新新闻

基于LSTM的五类动作识别源码包:从视频特征提取到可视化全流程

基于LSTM的五类动作识别源码包:从视频特征提取到可视化全流程

简介:这份资源面向深度学习入门者、课程设计与毕业设计学生,以及需要快速验证行为识别方案的技术人员,提供一套可直接运行的五类动作识别项目源码。项目覆盖jump、walk、pickup、salute、wave五种日常动作,并实现LSTM、TA-LSTM、S…

2026/10/13 1:59:18 阅读更多 →
Ventoy 多合一启动盘实战:一次部署,镜像即拷即用

Ventoy 多合一启动盘实战:一次部署,镜像即拷即用

简介:Ventoy 是一款开源的可启动 U 盘制作工具,面向系统运维、装机测试与多系统启动盘需求的技术人员。它解决的核心痛点是无需反复格式化磁盘,只需将 ISO/WIM/IMG/VHD(x)/EFI 等镜像文件复制到 U 盘即可启动,并支持一次放入多个镜…

2026/10/13 1:59:18 阅读更多 →
Win10下用VS2017与CMake编译OpenCV 4.5.1并集成contrib模块的完整指南

Win10下用VS2017与CMake编译OpenCV 4.5.1并集成contrib模块的完整指南

简介:一份专为Windows平台计算机视觉开发者准备的OpenCV 4.5.1contrib重新编译成果,基于win10、VS2017与CMake构建,解决在官方发行版中无法直接使用SIFT、SURF等contrib模块功能的痛点。包体为RAR压缩包,共992个文件、约47.65MB&a…

2026/10/13 1:59:18 阅读更多 →
STM32CubeIDE集成RT-Thread实战:从裸机到多任务调度

STM32CubeIDE集成RT-Thread实战:从裸机到多任务调度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:59:18 阅读更多 →
Visual Studio 2010 Shell(Isolate):轻量级遗产系统调试环境搭建指南

Visual Studio 2010 Shell(Isolate):轻量级遗产系统调试环境搭建指南

简介:Microsoft Visual Studio 2010 Shell (Isolate) 是面向Windows平台C、C#、VB.NET等开发者的一套轻量级、可定制IDE运行环境,专为无需完整VS安装但需调试器、编辑器及扩展框架的场景设计,适用于旧系统维护、第三方工具集成或精简开发环境…

2026/10/13 1:59:18 阅读更多 →
JavaScript公式编辑器实战:从LaTeX渲染到存储回显全解析

JavaScript公式编辑器实战:从LaTeX渲染到存储回显全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:58:18 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →