TypeScript 多场景设计方案及应用实践
@czy88840616 MidwayJS MidwayJS MidwayJS Midway Pandora.js Sandbox MidwayJS Midway MidwayJS ⾯面向未来的全栈开发框架 TS ⾯面向过去,接受历史 Review TS ⾯面向现在,解决问题 Solve TS ⾯面向未来,探索未知 Explore Node.js Ready ? TS 来看看数据 Node 如今集团总约 1600 个应⽤用 2014 2015 2016 2017 2018 2019.1 2019.5 2300+ 700+ 1600+ TS ~70% 5% BFF 使⽤用框架 接⼊入治理理 使⽤用 TS 72.9% 91% TS 来看看问题 TS 复杂度逐步增加 - 全栈应⽤用 成为中流砥柱 - 核⼼心应⽤用 ⾯面向外部⽤用户 - ⼤大流量量 TS 调⽤用 我们是来解决问题的 TS Why is Midway Egg 有⾃自⼰己解决的东⻄西 Midway 解决的痛点不不同,不不是⾮非常适合我们的情况 Egg 是个好框架 by TypeScript TS 定位不不同 在内部体系中,Egg作为底层框架,不不直接使⽤用 TS 场景不不同 Egg 解决的是 BFF 场景,⽽而淘宝有不不少全栈场景 TS 场景不不同 Egg 解决的是 BFF 场景,⽽而淘宝有不不少全栈场景0 码力 | 95 页 | 8.28 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版忘曲线”来 复习题目,通常在进行 3~5 轮的重复后,就能将其牢记在心。推荐的题单和刷题计划请见此 GitHub 仓库。 3. 阶段三:搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富 知识体系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的 刷题心得可以在各个社区找到。 如图 0‑8 所示,本书内容主要涵盖“阶段一” ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.0.0b5 TypeScript 版一个挑战,但请放心,这是很正常的。我们可以按 照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3‑5 轮的重复后,就能将其牢记在心。 3. 搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体 系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心 得可以在各个社区找到。 如图 0‑7 所示,本书内容主要涵盖“第一阶段 ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无需继续执行其他 操作,因此系统无需保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归。0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版忘曲线”来 复习题目,通常在进行 3~5 轮的重复后,就能将其牢记在心。推荐的题单和刷题计划请见此 GitHub 仓库。 3. 阶段三:搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富 知识体系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的 刷题心得可以在各个社区找到。 如图 0‑8 所示,本书内容主要涵盖“阶段一” ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 383 页 | 18.49 MB | 10 月前3
TypeScript Handbook(中文版)
TypeScript 2.3 正式发布! 从前打心眼儿里讨厌编译成JavaScript的这类语言,像Coffee,Dart等。 但是 在15年春节前后却爱上了TypeScript。 同时非常喜欢的框架Dojo,Angularjs也 宣布使用TypeScript做新版本的开发。 那么TypeScript究竟为何物?又有什么 魅力呢? TypeScript是Microsoft公司注册商标。 我们不需要考虑状态 - 事实上,在 React.Component我们把状 态指定为了 object ,因此使用SFC更简洁。 当在创建可重用的通用UI组件的时 候,在表现层使用组件局部状态比较适合。 针对我们应用的生命周期,我们会审视 应用是如何通过Redux轻松地管理普通状态的。 现在我们已经写好了组件,让我们仔细看看 index.tsx ,把 可以考虑使用Jest的 toEqual方法。 创建容器 在使用Redux时,我们常常要创建组件和容器。 组件是数据无关的,且工作在表现 层。 容器通常包裹组件及其使用的数据,用以显示和修改状态。 你可以在这里阅 读更多关于这个概念的细节:Dan Abramov写的表现层的容器组件。 TypeScript Handbook(中文版) 81 React 现在我们修改 src/components/Hello 0 码力 | 557 页 | 7.48 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版点,但这是很正常的,请不要担心。学习中 有一种概念叫“周期性回顾”,同一道题隔段时间做一次,在重复 3 轮以上后,往往就能牢记于心了。 3. 搭建知识体系。在学习方面,可以阅读算法专栏文章、解题框架、算法教材,不断地丰富知识体系。在 刷题方面,可以开始采用进阶刷题方案,例如按专题分类、一题多解、一解多题等,相关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段 省略所有系数。例如,循环 2? 次、5? + 1 次、⋯⋯,都可以化简记为 ? 次,因为 ? 前面的系数对时间 复杂度也不产生影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套 用上述 1. 和 2. 技巧。 以下示例展示了使用上述技巧前、后的统计结果。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = number { if (n <= 1) return 0; return logRecur(n / 2) + 1; } 线性对数阶 ?(? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度都是 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 // === File: time_complexity0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 4.0 使用手册
书栈网 · BookStack.CN 构建 从前打心眼儿里讨厌编译成JavaScript的这类语言,像Coffee,Dart等。 但是在15年春节前后却爱上了 TypeScript。 同时非常喜欢的框架Dojo,Angularjs也宣布使用TypeScript做新版本的开发。 那么 TypeScript究竟为何物?又有什么魅力呢? TypeScript是Microsoft公司注册商标。 Ty 但在这个例子里我们不需要考虑状 态 - 事实上,在 React.Component我们把状态指定为了 object ,因此使用函 数组件更简洁。 当在创建可重用的通用UI组件的时候,在表现层使用组件局部状态比较适合。 针对我 们应用的生命周期,我们会审视应用是如何通过Redux轻松地管理普通状态的。 现在我们已经写好了组件,让我们仔细看看 index.tsx ,把 。 可以考虑使用Jest的toEqual方法。 在使用Redux时,我们常常要创建组件和容器。 组件是数据无关的,且工作在表现层。 _容器_通常包 裹组件及其使用的数据,用以显示和修改状态。 你可以在这里阅读更多关于这个概念的细节:Dan Abramov写的_表现层的容器组件_。 现在我们修改 src/components/Hello.tsx ,让它可以修改状态。 我们将添加两个可选的回调属性 0 码力 | 683 页 | 6.27 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 TypeScript 版曲線”來 複習題目,通常在進行 3~5 輪的重複後,就能將其牢記在心。推薦的題單和刷題計劃請見此 GitHub 倉庫。 3. 階段三:搭建知識體系。在學習方面,我們可以閱讀演算法專欄文章、解題框架和演算法教材,以不斷 豐富知識體系。在刷題方面,可以嘗試採用進階刷題策略,如按專題分類、一題多解、一解多題等,相 關的刷題心得可以在各個社群找到。 如圖 0‑8 所示,本書內容主要涵蓋“階段一 般無法僅憑複雜度來選擇 ? = 8 之下的最優解法。但對於 ? = 85 就很好選了,這時增長趨勢已經佔主導了。 51 第 3 章 資料結構 Abstract 資料結構如同一副穩固而多樣的框架。 它為資料的有序組織提供了藍圖,演算法得以在此基礎上生動起來。 第 3 章 資料結構 www.hello‑algo.com 52 3.1 資料結構分類 常見的資料結構包括陣列、鏈結串列、堆 支,避免許多無意義的嘗試,從而提高了搜尋效率。 圖 13‑3 根據約束條件剪枝 13.1.3 框架程式碼 接下來,我們嘗試將回溯的“嘗試、回退、剪枝”的主體框架提煉出來,提升程式碼的通用性。 在以下框架程式碼中,state 表示問題的當前狀態,choices 表示當前狀態下可以做出的選擇: /* 回溯演算法框架 */ function backtrack(state: State, choices:0 码力 | 384 页 | 18.80 MB | 10 月前3
TypeScript 类型系统仿TypeScript静态类型编程语言 23 基础框架:Antlr + LLVM 特性:int / float / boolean / string / array+常见基础控制语句 状态:开发中 我目前的研究方向 24 目标:基于静态分析寻找脆弱的Node.js代码 需要做的: 1. 改造TypeScript编译器 2. 搭建TypeScript静态分析框架 3. 设计实现基于静态污点分析的漏洞检测技术 设计实现基于静态污点分析的漏洞检测技术 4. 设计实现面向Node.js应用的安全测试框架 Q & A0 码力 | 25 页 | 1.27 MB | 1 年前3
Programming TypeScript树(abstract syntax tree, AS ). AST 是去掉了空白、注释和缩进用的制表符或空格之后的数据结构。 编译器把 AST 转换成一种字节码(bytecode) 的低(底?)层表示。 字节码再传给运行时程序计算,最终得到结果。 ● 综上 1. 把程序解析成AST 2. 把AST编译成字节码 3. 运行时计算字节码 TS 的特殊之处在于,它不直接编译成字节码,而是编译成JS代码0 码力 | 3 页 | 202.08 KB | 1 年前3
共 10 条
- 1













