TypeScript 4.0 使用手册
"ReactDOM" 39. } 40. }; 大家可能对 externals 字段有所疑惑。 我们想要避免把所有的React都放到一个文件里,因为会增 加编译时间并且浏览器还能够缓存没有发生改变的库文件。 理想情况下,我们只需要在浏览器里引入React模块,但是大部分浏览器还没有支持模块。 因此大部 分代码库会把自己包裹在一个单独的全局变量内,比如: jQuery 或 _ dist 目录里,它们可以按照预想运行。 若如此,那么你写的纯JavaScript文件将做为TypeScript的输入,你将要运行的是TypeScript的 输出。 在从JS到TS的转换过程中,我们会分离输入文件以防TypeScript覆盖它们。 你也可以指定 输出目录。 你可能还需要对JavaScript做一些中间处理,比如合并或经过Babel再次编译。 在这种情况下,你 应该已经有了如下的目录结构。 isAcceptable(s) ? "matches" : "does not match" } ${ name }`); 34. } 35. } 当应用变得越来越大时,我们需要将代码分离到不同的文件中以便于维护。 现在,我们把 Validation 命名空间分割成多个文件。 尽管是不同的文件,它们仍是同一个命名空 间,并且在使用的时候就如同它们在一个文件中定义的一样。 因为不同文件之间存在依赖关系,所以0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
"react-dom": "ReactDOM" }, }; 大家可能对 externals 字段有所疑惑。 我们想要避免把所有的React都放到一个 文件里,因为会增加编译时间并且浏览器还能够缓存没有发生改变的库文件。 TypeScript Handbook(中文版) 67 React与webpack 理想情况下,我们只需要在浏览器里引入React模块,但是大部分浏览器还没有支 持模块。 dist 目录里,它们可以按照预想运行。 若如此,那么你写的纯JavaScript文件将做为TypeScript的输入,你将要运行的是 TypeScript的输出。 在从JS到TS的转换过程中,我们会分离输入文件以防 TypeScript覆盖它们。 你也可以指定输出目录。 你可能还需要对JavaScript做一些中间处理,比如合并或经过Babel再次编译。 在 这种情况下,你应该已经有了如下的目录结构。 console.log(`"${ s }" - ${ validators[name].isAcceptable(s) ? } } 分离到多文件 TypeScript Handbook(中文版) 372 命名空间 当应用变得越来越大时,我们需要将代码分离到不同的文件中以便于维护。 多文件中的命名空间 现在,我们把 Validation 命名空间分割成多个文件。 尽管是不同的文件,它们0 码力 | 557 页 | 7.48 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版长度不可变 长度可变 内存使用率 占用内存少、缓存局部性好 占用内存多 优势操作 随机访问 插入、删除 � 缓存局部性的简单解释 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其它数据,从而借助高速缓存来提升后续操作的执行速度。 链表则不然,计算机只能挨个地缓存各个结点,这样的多次“搬运”降低了整体效率。 两种实现都支持栈定义中的各项操作,数组实现额外支持随机访问,但这已经超出栈的定义范畴,一般不会用 到。 时间效率 在数组(列表)实现中,入栈与出栈操作都是在预先分配好的连续内存中操作,具有很好的缓存本地性,效率 很好。然而,如果入栈时超出数组容量,则会触发扩容机制,那么该次入栈操作的时间复杂度为 ?(?) 。 在链表实现中,链表的扩容非常灵活,不存在上述数组扩容时变慢的问题。然而,入栈操作需要初始化结点对 效率更高,这是因为: ‧ 出现最差情况的概率很低:虽然快速排序的最差时间复杂度为 ?(?2) ,不如归并排序,但绝大部分情况 下,快速排序可以达到 ?(? log ?) 的复杂度。 ‧ 缓存使用效率高:哨兵划分操作时,将整个子数组加载入缓存中,访问元素效率很高。而诸如「堆排序」 需要跳跃式访问元素,因此不具有此特性。 ‧ 复杂度的常数系数低:在提及的三种算法中,快速排序的 比较、赋值、交换 三种操作的总体数量最少0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . . . 序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 优化数据结构的操作效率。 ‧ 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . . . 序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数 据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余 优化数据结构的操作效率。 ‧ 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。0 码力 | 383 页 | 18.49 MB | 10 月前3
TypeScript 多场景设计方案及应用实践
服务层写法⼀一致,体验⼀一致 TS 体验上的问题 1、写法上的不不⼀一致 - Class / Function 2、多实现上的不不⼀一致 - ⽆无法⽅方便便的继承 3、代码洁癖上的问题 - 编译⽬目录分离 TS 体验 为了了良好的使⽤用 IoC,我们将整个 Midway 修改为了了 OO 的模型,所有的东⻄西都通过 class 来编码,这样也 可以更更好的借鉴 java 的思想,另⼀一⽅方⾯面可以通过接⼝口 Service B Service C Controller D Service D MApp1 MApp2 MyApp MApp3 MApp4 TS 和⾃自⼰己解耦 实现和定义分离 基于新的装饰器器开发模型 TS 和⾃自⼰己解耦 基于新的装饰器器开发模型 @controller @get/post @plugin @config @logger @hsf @schedule js 架构团队,集团的领航者当仁 不不让的投奔进去。 定义与实现分离 TS 代码重构实践 分离 midway-core,将通⽤用的能⼒力力都放在这层 分离通⽤用层 TS 代码重构实践 1、⾃自扫描注⼊入 ioc 的能⼒力力 2、适配 midway 的请求作⽤用域能⼒力力 3、兼容原有装饰器器的能⼒力力 分离通⽤用层 ⾃自动绑定 装饰器器定义 请求作⽤用域 IoC egg0 码力 | 95 页 | 8.28 MB | 1 年前3
Hello 算法 1.0.0b5 TypeScript 版优化数据结构的操作效率。 ‧ 空间效率高: 数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问: 数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性: 当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下缺点。 ‧ 插入与删除效率低: 当数组中元素较多时,插入与删除操作需要移动大量的元素。 总结对比了数组和链表的各项特点与操作效率。由于它们采用两种相反的存储策略,因此各种性质和 操作效率也呈现对立的特点。 表 4‑1 数组与链表的效率对比 数组 链表 存储方式 连续内存空间 离散内存空间 缓存局部性 友好 不友好 容量扩展 长度不可变 可灵活扩展 内存效率 占用内存少、浪费部分空间 占用内存多 访问元素 ?(1) ?(?) 添加元素 ?(?) ?(1) 删除元素 ?(?) ?(1) 向父节点的引用来实现,类似于双向链表。 ‧ 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和 后一个网页。双向链表的特性使得这种操作变得简单。 ‧ LRU 算法:在缓存淘汰算法(LRU)中,我们需要快速找到最近最少使用的数据,以及支持快速地添 加和删除节点。这时候使用双向链表就非常合适。 循环链表常被用于需要周期性操作的场景,比如操作系统的资源调度。 ‧ 时0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 TypeScript 版动态数组 動態陣列 hard disk 硬盘 硬碟 random‑access memory (RAM) 内存 記憶體 cache memory 缓存 快取 cache miss 缓存未命中 快取未命中 cache hit rate 缓存命中率 快取命中率 stack 栈 堆疊 top of the stack 栈顶 堆疊頂 bottom of the stack 栈底 堆疊底 queue0 码力 | 384 页 | 18.80 MB | 10 月前3
共 8 条
- 1













