Home

TypeScript 类型 tips

从对象类型衍生一个 union 类型 export const fruitCounts = { apple: 1, pear: 4, banana: 26, } type FruitCounts = typeof fruitCounts /* type SingleFruitCount = | { apple: number } | { banana: number } | { pear: number } */ type SingleFruitCount = { [K in keyof FruitCounts]: { [k2 in K]: FruitCoun...

Read more

使用 rollup.js 按需编译构建 TS 项目

假设你有以下项目结构: ``` project │ README.md │ rollup.config.js │ tsconfig.json └───package │ └───src │ │ └───core │ │ │ │ index.ts │ │ │ │ file.ts │ │ │ │ │ └───plugin │ │ │ └───a │ │ │ │ index.ts │ │ │ └───b │ │ │ │ index.ts ``` 如果能够分别把 src 文件夹下面的 core 和 plugi...

Read more

Vite / TS / Vue3 配置代码错误提示

Vite + TS + Vue3 配置代码错误提示 在 Vite 中,当类型检测工具检测到错误时,项目还是可以正常运行的,如果需要在终端和网页中弹出错误提示,则需要新增一个 Vite 配置: npm install vite-plugin-checker vue-tsc -D 在 Vite.config.ts 中新增 plugin: import checker from 'vite-plugin-checker' export default () => { plugins: [ checker({ vueTsc: true }) ] } 重新启动以后,如果代码中出现类型错误,终端和网页中都会弹出错误提示。 在线演示:https://stac...

Read more

ECMA 2022 array find from last

这是一个新提案,在 ECMA 2022(第十三版本) 中已经实施,目前大多数浏览器都已经支持。 为什么有这个提案? 在一个数组中查找一个元素是一种非常常见的编程模式。 这个提案还有一个重要的原因:更具语义化,使操作能够更直观的展示。 这个提案对于一些对性能敏感的操作来说是有一定作用的,比如在 React render function 中。 ECMAScript 当前支持两种方法寻找数组中的某个元素的索引: Array.prototype.indexOf Array.prototype.lastIndexOf 还有 Array.prototype.find 方法用来寻找数组中的某个元素,Array.prototype.fin...

Read more

函数柯里化(Currying)

柯里化是函数的一种高级实现。它不仅在 JavaScript 中用到,其他语言同样也有柯里化函数(Curring)。 柯里化是函数的一种转换,它把一个函数 fn(a, b, c) 转换成 fn(a)(b)(c)这样的调用形式。 柯里化不会调用一个函数,而是转换一个函数。 让我们通过示例来理解柯里化函数是什么: 我们创建一个柯里化函数 curry(f) ,它将把一个接收两个参数的函数 f 进行柯里化,也就是说,curry(f) 把 f(a,b)这个函数转换成 f(a)(b) 这种形式。 function curry(f) { // curry(f) 进行柯里化转换 return function(a) { return function(b) { retu...

Read more

什么时候使用 useMeo、useCallback(译)

什么时候应该使用 useMemo 和 useCallback 呢? 先说结论:大多数情况下都不需要用。 useMemo 和 useCallback 的作用 两者的作用都用于性能优化,但是性能优化也是有成本的。使用它们不一定能提升性能,但是一定会增加使用成本。 所以到底什么时候用 useMemo 和 useCallback React 提供这两个 hooks 有以下原因: 引用比较造成的 re-render 复杂(耗费性能)的计算 引用比较 在 React 中,两种情况会对引用比较造成影响: 依赖项(dependency list) 例如以下代码会存在一个问题: function Foo({bar, baz}) { const options = {...

Read more

正则表达式字符类

假设有这样一个电话号码:+7(903)-123-45-67,现在需要把它转换成一个纯数字:79031234567。 那首先需要找到并且移除非数字的字符。字符类(Character classes)就可以派上用场了。 character class 是一个特殊的符号,用来匹配某个特定的字符。 \d 用来匹配任意一个数字,例如找到电话中的第一个数字: let str = "+7(903)-123-45-67"; let regexp = /\d/; alert( str.match(regexp) ); // 7 在没有 g 符号的情况下,上面的正则表达式只会找第一个符合条件的字符,即 \d。 添加 g 符号即可找到所有数字: let str = "+7(903)-12...

Read more

React 18 新特性 Automatic batching

React-18-新特性-Automatic-batching(译) 简介 React 18 新增了一个新特性:Automatic batching,用来提升性能,此特性在 React 18 中会默认启用,这篇文章将会介绍什么是 batch,在 React 18 以前它是怎么工作的,在 React 18 之后有哪些改变。 什么是 batching? batching 即在更新数据 data 时,如果存在多个 setState,React 会把多次的 setState 操作合并成一次,以减少 re-render 次数并提升性能。 例如:假如在一次鼠标点击事件中,使用了两次 setState 操作,React 总是会把两次 setState 操作合并成一次,所以两次 setSta...

Read more