Effect Schema 怎么校验长度、范围和格式?
用 Schema 的 check 给类型附加约束,比如 1 到 150 的整数、非空字符串、符合正则的邮箱。约束在解码时一并检查。
哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。
用 Schema 的 check 给类型附加约束,比如 1 到 150 的整数、非空字符串、符合正则的邮箱。约束在解码时一并检查。
Schema.Struct 解码时默认剔除未声明的字段。想严格拒绝多余字段,解码时传入 onExcessProperty 选项;想保留,就在 Schema 里声明。
用 Schema.brand 给形状相同的值不同的类型身份,让用户 ID 不能当订单 ID 传;以及 brand 叠在校验上、它的保证边界和适用范围。
用 Schema.TaggedStruct 与 Schema.Union 把带可选字段的状态对象拆成判别联合,用 Schema.Literals 表达有限取值,并说明它与 TaggedError 的关系。
用 Schema.decodeTo 搭配 SchemaTransformation.transform,给出解码与编码两个方向,把外部表示转成内部类型;并说明转换里为什么不该做 IO。
用一个依赖自己所提供服务的 Layer 包装原实现,原实现一行不改。这篇用 UserRepo 的日志装饰层讲清写法和组装顺序。
都是一个 fiber 发、别的 fiber 收,Queue 是把任务分给消费者,PubSub 是把事件广播给所有订阅者。讲清两者的语义、缓冲策略和 PubSub 的订阅时序。
用 Semaphore.make 创建许可,再用 withPermits 包裹要限流的 Effect,就能让一百个调用同时发起、同一时刻只有 n 个在执行。也讲清它限制的是并发度而不是速率。
数据库行、插入、更新、JSON 响应四份类型一定会漂移。Model.Class 只写一份字段声明,用修饰器标注字段属于哪些变体,其余由它派生。
契约文件只依赖 effect,服务端用 toLayer 实现,客户端用 RpcClient 调用,业务错误与传输失败同在错误通道里但 tag 不同。
sql.withTransaction 在业务失败和被中断时都会回滚。这篇用先加后扣的转账和 50 毫秒超时验证,并说明事务里该放什么。
SqlError 的 reason 是带 tag 的联合,但 SQLite 驱动对主键冲突和唯一约束的分类不同。映射前先用真实驱动写一条重复插入的测试。
Effect 4.0.5 不再用 effect/unstable 路径,而是用每个导出上的 @stability 标签表达稳定性。这篇讲三种标签的含义、这样设计的好处,以及路径里没有 unstable 带来的新陷阱。
用 @effect/tsgo 的 unstableApiUsage、experimentalApiUsage 与放行名单,把项目里的 unstable 用法收成一份显式清单;库作者再打开 apiStabilityLeak。
给出一个遍历 effect 的 dist 声明文件、按 @stability 标签给模块分类的 TypeScript 脚本,以及它的统计口径与局限。
按 effect 4.0.5 的 @stability 标签扫描结果,列出整个模块都是 unstable 的目录、整体 stable 但个别声明不是的 mixed 模块,以及 experimental 模块。
缓冲区满了怎么办是业务决定而不是性能调优:suspend 不丢数据,dropping 丢新的,sliding 丢旧的。
用 Stream.paginate 把分页接口描述成流,再用 groupedWithin 与 mapEffect 成批写库。内存只与批大小和并发度有关。
Stream 多一层抽象、多一套 API。数据量小、单次请求、需要广播共享或按元素协调状态时,更简单的工具更合适。
Effect v4 的 Stream 在内部按数组块传递元素,Stream.throttle 的 cost 收到的是整块而不是单个元素。这篇讲清怎么写才能真正逐元素限速。