fp-ts函数式编程 - 一些小技巧

问:如何在pipe中实现if/else判断null?
答:Option.fromNullable

import { pipe } from "fp-ts/function";
import * as O from "fp-ts/Option";

let obj = {
  state: {
    value: "test"
  }
};

function calculate(input: { value: string|null }) {
    console.log('input');
  return input?.value;
}

console.log(
  pipe(
    obj.state,
    O.fromNullable,
    O.map((value) => calculate(value))
  )
);

问:取出Either中的成功或失败信息
答:Folder(或Chain),以下是Folder代码示例

import { either as E } from "fp-ts";
import { flow } from "fp-ts/function";

interface Person {
  name: string;
}

function ValidateName(name: string): E.Either<string, string> {
    return  /[a-zA-z]/.test(name)? E.right(name) : E.left("invalid name")
}

const makeError = (message: string) => new Error(message);

const makeUser = flow(
    ValidateName,
  E.map((name): Person => ({ name })),
  E.mapLeft(makeError)
);

// (name: string) => string
const main = flow(
  makeUser,
  E.fold(
    (error) => error.message,
    ({ name }) => `Hi, my name is "${name}"`
  )
);

console.log(main("Tom"));
console.log(main("123"));
posted @   老胡Andy  阅读(388)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示