随笔分类 - TypeScript
摘要:这个问题的起因:review公司项目的时候,发现很多如下的代码(mock) 先是一个工具类Util.ts class NumberUtil { static ToInt(num?: Number): number { num = num || 0; return Math.floor(num); }
阅读全文
摘要:第一篇介绍了如何将React组件转换为Web Component 第二篇介绍了子应用(Web Component)中的路由可以正常作用与Shell App 第三篇介绍了Sub App与Shell App通过属性或自定义事件交互 第四篇介绍Web Component + React实现微前端的POC
阅读全文
摘要:曾经一度以为React已经是前端框架的极致,直到看到了Stencil。 给人的感觉不亚于用惯了jQuery之后突然看到React。这就是所谓的降维打击,或者说玩法不同吧。 直接操作DOM的框架里面,jQuery做到了极致,然而React搞了个虚拟Dom。Stencil干脆用起了Web Compone
阅读全文
摘要:有angular、nestjs经验的程序员一定会意识到依赖注入(dependency injection)带来的便利, 当然依赖注入不是什么新鲜的概念,并且也不是nodejs平台首创。 本文旨在介绍如果自己定义一个简单的注入帮助类。 实践步骤如下: 安装依赖 npm init --y npm ins
阅读全文
摘要:前提:为了培养团队的技术能力,拿了个小修改需求作为函数式编程的实践机会。 需求:业务部门提出积分活动,当用户达成任务时送积分。简化逻辑,我们暂且认为逢5送5分,逢10送10分,其他送1分。 即达成任务1-4次时,每次送1分。第5次送5分,第10次送10分。 实现过程: mkdir [项目路劲] np
阅读全文
摘要:本文将介绍如何通过RxJS+TS实现模块间的松耦合。所谓松耦合是指模块间不能存在显式的引用关系。公司项目中经常看到junior程序员写出如下的代码: var moduleA = { foo: function() { moduleB.doSomeThing(); moduleC.doSomeThin
阅读全文
摘要:高并发场景下容易出现的超卖问题(一张票卖给两个客户,或是库存卖成负数),一个常用的解决方法就是加锁。对于单机系统,内存级别的锁就足够应付(如c#中的lock);对于分布式系统Redis往往是一个常见的选项。当然,有一点要清楚的是:加锁有可能会影响代码执行效率,不是所有场景都适合加锁。 这里为了简化问
阅读全文
摘要:之前的文章介绍了QueryBus, CommandBus的用法(这里的bus可以翻译为总线:查询总线、命令总线)。使用这些总线(设计模式)的目的在于实现Controller层与Business Logic层(示例中对应的是Commands/Queries下的Handler)的解耦。然而,通常在Bus
阅读全文
摘要:继前一篇讲述了NestJS中CQRS的Query部分的实现,本文会在此基础上讲述Command部分的基础实现(高级实现会在下一篇介绍)。 在之前代码的基础上增加: src/comments/commands文件夹,结构如下: add-comment.handler.ts import { Comma
阅读全文
摘要:本文旨在介绍NestJS下CQRS(命令查询职责分离)的实现。NestJS的确是个强大的NodeJS框架,支持了绝大多数现在流行的技术栈。至于什么是CQRS模式,请大家自行查阅。废话不多说,直接上代码。 1: 新建项目 nest new cqrs-demo 2: 安装CQRS依赖 npm insta
阅读全文
摘要:本文简述如何在TypeScript下实现AOP (aspect oriented programming) 面向切面编程。 什么是AOP,我的理解是将特定功能的代码切入到某个已经封装好的对象、类或函数的执行过程中。 之前的一篇文章讲述过如何用decorator、高阶函数实现aop。这里再追加一种实现
阅读全文
摘要:前一篇讲述了TypeORM的安装以及通过对象化的方式访问数据库。 然而很多场景下我们会需要更复杂的操作,如多表联合,然后映射为Entity。 本文在前一篇的基础上,用代码示例说明如何在TypeORM中实现SQL查询。 修改ormconfig.json, 增加新的配置项: Menu。与前一篇配置不同的
阅读全文
摘要:本文旨在说明如何通过NestJS实现以ORM方式操作MySQL: 如何安装MySQL不是本文重点,就此跳过。 安装NestJS npm install -g typescript npm install -g @nestjs/cli cd [Project Path] nest new dashbo
阅读全文
摘要:场景: React应用需要实现登录界面与Dashboard界面的切换。 使用一个全局变量存储用户信息,如果为空,则进入登录界面;否则进入Dashboard界面。 实现方法: 通过useContext保存全局用户信息,如果全局user对象的email字段为空,就说明退出登录,否则为登录状态。 User
阅读全文
摘要:什么是编程范式(programming paradigm)? 编程范式是依据编程语言的特征对其分类的方式。 Programming paradigms are a way to classify programming languages based on their features. 申明式与指
阅读全文
摘要:什么是JWT? JWT全称 - JSON WEB TOKEN Link 什么是Redis? Redis - 内存缓存服务器 Link Windows下Redis的安装 NestJS 与 Authentication 注意:Authentication(鉴权) 与 Authorization(授权)的
阅读全文
摘要:协变(Covariant)、逆变(Contravariant)、双向协变(Bivariant)并非Typescript所特有,其他结构化语言诸如c#、java等也都拥有该特性。 怎么理解这个概念呢? 先说说集合、超集、子集(set, superset, subset) 下图中有两个集合:脊索动物、哺
阅读全文
摘要:一:类型映射(Mapped Types) const data = { value: 123, text: "text", subData: { value: false } }; type Data = typeof data; // type Data = { // value: number;
阅读全文
摘要:公司项目留下的JS代码,其中有一大段的switch/case (160行),正巧给组里的同事介绍TypeScript,就顺便拿这段switch/case做了个改造的例子。 原始代码(仅为示例) var aHelper = { init: function() {...} } var bHelper
阅读全文