首页 > 其他分享 >[TypeScript] 实现一个强大的模式匹配

[TypeScript] 实现一个强大的模式匹配

时间:2025-01-13 22:33:09浏览次数:1  
标签:TypeScript console log Color 强大 value match 模式匹配 Result

前言

众所不周知,在Rust语言中,有一个强大的语法,模式匹配:

fn main() {
    let data = Some(12);
    match data {
        Some(i) => println!("{}", i),
        None => println!("No data"),
    }
}

那么在typescript中我们如何为自己实现一个这么好用的语法呢?

match.ts

// 定义 Match 类来处理模式匹配
class Match<T> {
  private readonly value: T;

  constructor(value: T) {
    this.value = value;
  }

  // with 方法用于定义匹配分支
  with<R>(
    patterns: Array<[((value: T) => boolean) | T, (value: T) => R]>
  ): R {
    for (const [pattern, handler] of patterns) {
      if (
        typeof pattern === 'function'
          ? (pattern as (value: T) => boolean)(this.value)
          : pattern === this.value
      ) {
        return handler(this.value);
      }
    }
    throw new Error('No pattern matched');
  }
}

// 创建 match 函数作为入口
function match<T>(value: T): Match<T> {
  return new Match(value);
}

usage1

基础数值匹配

const numberModel: [number | ((value: number) => boolean), (value: number) => string][] = [
  [1, (n) => `one: ${n}`],
  [2, (n) => `two: ${n}`],
  [3, (n) => `three: ${n}`],
  [(n) => n > 3, (n) => `more than three: ${n}`],
]
console.log(match(1).with(numberModel)); // "one: 1"
console.log(match(100).with(numberModel)); // "more than three: 100"

usage2

自定义类型匹配

type Result<T, E = Error> = {
  error?: E;
  value?: T;
}

type ResultModel<T, E = Error> = [((result: Result<T, E>) => boolean), (result: Result<T, E>) => string];
const resultModel: ResultModel<number>[] = [
  [(r: Result<number>) => !r.error, (r: Result<number>) => `Success: ${r.value}`],
  [(r: Result<number>) => !!r.error, (r: Result<number>) => `Error: ${r.error}`],
]
console.log(match({
  value: 42
}).with(resultModel)); //  "Success: 42"
console.log(match({
  error: new Error('Something went wrong')
}).with(resultModel)); // "Error: Error: Something went wrong"


usage3

枚举匹配

enum Color {
  Red,
  Green,
  Blue,
}
type ColorModel = [Color | ((value: Color) => boolean), (value: Color) => string];
const colorModel: ColorModel[] = [
  [Color.Red, () => 'Found Red'],
  [Color.Green, () => 'Found Green'],
  [Color.Blue, () => 'Found Blue'],
]
console.log(match(Color.Green).with(colorModel)); // "Found Green"
console.log(match(Color.Blue).with(colorModel)); // "Found Blue"

标签:TypeScript,console,log,Color,强大,value,match,模式匹配,Result
From: https://www.cnblogs.com/coderDemo/p/18669554

相关文章

  • 推荐4款基于.NET开源、功能强大的CMS建站系统
    前言CMS系统作为一种强大的内容管理工具,在数字化时代发挥着越来越重要的作用。无论是个人博客还是大型企业官网,选择一个合适的CMS都能极大地提高效率和用户体验。今天大姚给大家推荐4款基于.NET开源、免费、功能强大的CMS建站系统,希望可以帮助到有需要的同学。SSCMSSSCMS内容......
  • 痞子衡嵌入式:我评上了2024年度电子星球(eestar)最强大脑
    今天收到了「电源网旗下电子星球」颁发的2024年度最强大脑奖牌,这是电子星球第二年给痞子衡颁奖了。这个奖牌设计得非常用心,区别于去年奖牌只能捧在手上,今年痞子衡可以把奖牌挂脖子上出去拉风了。从23年8月开始,电子星球小编每个工作日会转发一篇痞子衡的技术原创文章,直到24年6......
  • Python 基础知识 之 选择(分支)结构 + 模式匹配结构(match)
    选择结构按照条件选择执行不同的代码段1.单分支结构if语法结构执行流程:如果表达式的值为True,就执行语句块,如果表达式的值为False,就跳过语句块,继续执行下面的语句⭐注意:⭐⭐⭐表达式后面的冒号;缩进,python中通过缩进来控制程序逻辑示例;#1.判断是否中奖nu......
  • Adobe Photoshop(简称 PS)强大的图像编辑软件下载安装与快捷键
    AdobePhotoshop软件简介AdobePhotoshop(简称PS)是由Adobe公司开发的一款强大的图像编辑软件。自1988年发布以来,Photoshop以其强大的功能、灵活的工具和丰富的插件而闻名,成为专业摄影师、设计师和艺术家日常工作中不可或缺的工具。无论是简单的照片修饰,还是复杂的图像合成与......
  • 【DBOS Transact】Python 持久执行工具,轻量而强大
    背景介绍如果工作中我们要运行的程序分几个步骤去执行,如果当中间某个步骤执行失败的时候,我们不得不重新全部执行一遍,其实这样很费事费力,因为每次都是从头开始执行,而且这种代码放到生产中也会出现不稳定的情况,毕竟基础硬件的底层也会出现问题,比如当网络、操作系统等出现问题时,你所......
  • 【Rust】枚举与模式匹配
    目录思维导图一、概述1.枚举的定义与使用2.特殊枚举:Option4.模式匹配5.iflet构造二、枚举1.枚举的定义与作用2.IP地址的枚举示例示例代码3.结构体与枚举的组合示例代码4.枚举变体的灵活性示例代码5.枚举的方法代码示例:6.Option枚举的优势标准库......
  • workerpool,JavaScript强大的线程池库!
    ......
  • 来自官方的免费神器,功能确实强大
    今天给大家介绍一个来自微软商店的官方软件,它是一个非常好的抠图换背景修复的软件,功能十分强大,而且也完全免费。PhotoRetouch免费图片处理软件软件来自微软官方商店,完全免费,可以放心下载使用。软件的功能主要有五个,包括:删除物体、“快速修复”、“一键抠图”、......
  • [读书日志]从零开始学习Chisel 第十篇:Scala的模式匹配(敏捷硬件开发语言Chisel与数字系
    7.Scala的模式匹配7.1样例类和对象定义类时,如果在最前面加上关键字case,则这个类就被称为样例类。Scala的编译器自动对样例类添加一些语法便利:添加一个与类同名的工厂方法,可以通过类名(参数)来构造对象,而不需要使用new类名(参数)来构造;参数列表的每个参数都隐式地获得......
  • 五款强大报表软件助力企业提升数据分析效率
    本文将为大家介绍五款功能强大的报表软件,包括山海鲸报表、JReport、PowerBI、ZohoAnalytics和SAPCrystalReports。这些工具各具特色,能够帮助企业快速生成数据报表并进行深度分析。无论是数据可视化、报表定制、自动化生成还是与其他系统的集成,它们都能为企业的决策支持、业......