函数式 TypeScript #1:代数数据类型

主要观点:作者在日常工作中用 Go 和 TypeScript 时常运用在 Haskell 中学到的模式,此系列文章将介绍函数式编程的一些概念,本文先介绍代数数据类型(ADTs)。新工作中要跟踪 React SPA 中用户的每一个动作并序列化事件,Haskell 中实现 ADTs 较简单,在 TypeScript 中可利用Tagged类型和discriminator来实现,虽存在一些不足如判别器是字符串、值更冗长等,但在实际编程环境中大多不是问题,还可考虑使用枚举,且真实应用会自然演变成由 ADTs 建模的模式,下一篇文章将用 ADTs 演示类型类和高阶类型(HKTs)。

关键信息:

  • 作者日常用 Go 和 TypeScript,常借鉴 Haskell 模式。
  • 新工作要跟踪用户动作并序列化事件。
  • Haskell 中 ADTs 编码简单。
  • TypeScript 中利用Taggeddiscriminator实现 ADTs 及存在的不足。
  • 可考虑使用枚举替代字符串标签。
  • 真实应用会自然演变成 ADTs 模式,下篇介绍类型类和 HKTs。

重要细节:

  • 在 TypeScript 中Tagged类型根据第二个参数是否为undefined返回不同类型。
  • 实现的serialize函数根据e.tag进行不同的序列化操作。
  • const枚举的成员在编译后会变为数字字面量。
阅读 10
0 条评论