对表单值进行 TypeScript 类型推断
解释 简单来说就是,你通过表单描述去定义了表单的属性,然后你现在要做一个表单值对象,这个对象的属性名、值类型都得是描述里面出现过的。 // config [ { name: 'link', type: 'string', }, { name: 'age', type: 'number', } ] // 合法的 value { link: '', age: 0, } // 不合法的 value { link: 666, age: ...

Search for a command to run...
Articles tagged with #javascript
解释 简单来说就是,你通过表单描述去定义了表单的属性,然后你现在要做一个表单值对象,这个对象的属性名、值类型都得是描述里面出现过的。 // config [ { name: 'link', type: 'string', }, { name: 'age', type: 'number', } ] // 合法的 value { link: '', age: 0, } // 不合法的 value { link: 666, age: ...

背景 或者叫任务池吧,我也不太确定这个的学名叫啥,反正就是那种可以限制同一时间执行的任务数量的工具函数。 我前两天偷懒让 LLM(Claude)给我生成了一段,他是这样写的: export const runConcurrency = async <T>( tasks: Array<() => Promise<T>>, concurrency: number = 3 ): Promise<Array<T | Error>> => { const results: Array<T |...

背景 Bilibili Evolved 是一个模块化的 B 站 UserScript,我对这项目感兴趣的地方有两个点,一是沙箱的实现,二是插件系统的实现,本文主要是研究他的沙箱方案。 沙箱的实现 首先定位到沙箱的代码 load-feature-code.ts: export class LoadFeatureCodeError extends Error {} /** * feature 代码运行沙箱 */ type CodeSandbox = { /** * 在沙箱中执行代码 ...

这几天在开发浏览器插件,用的是 Plasmo + Redux 做状态管理,中途遇到了一个很“诡异”的问题,简单来说就是 Redux 的状态持久化刚开始能用,但数据量多起来之后,就会丢失状态。 在配置页面点击添加,当场是能看到变化的,但是刷新之后状态又会恢复到之前那样,如果 A 配置有 5 个,那么 B 配置只能存 1 个,反之 A 有 1 个,B 能存 2 个。 刚开始我在怀疑是 Plasmo 的问题,于是去 issues 里搜索,发现没有人问过,后来猜想可能是 storage 的配额问题,查了...

这两个 npm 包的功能是一样的,都是为了让构造 className 的时候方便带上条件,至于为什么会出现两个包,而且周安装量都有 1000 多万,我是不理解的,所以就抱着好奇的心态,看看他们具体是怎么做的,有什么差异。 classnames 完整代码如下: const hasOwn = {}.hasOwnProperty; export default function classNames () { let classes = ''; for (let i = 0; i ...

我这段时间在做 Tauri 本地应用,目前数据通过状态管理库(zustand) + tauri-plugin-store 持久化到本地文件中,后来我为了安全,做了一个数据导入、导出的功能,但完成后我就觉得不太对劲,好像整个流程上存在问题,我不知道最佳实践是什么样的。 或者可以这样说吧,我现在的数据是持久化到文件的,我想要把他保存在云端(等其他地方),并且支持从这些数据源恢复数据,同时也有数据迁移。 先说一下状态管理库持久化的情况: { name: 'name', // 持...
