主要观点:作者在日常工作中用 Go 和 TypeScript 时常运用在 Haskell 中学到的模式,此系列文章将介绍函数式编程的一些概念,本文先介绍代数数据类型(ADTs)。新工作中要跟踪 React SPA 中用户的每一个动作并序列化事件,Haskell 中实现 ADTs 较简单,在 TypeScript 中可利用Tagged
类型和discriminator
来实现,虽存在一些不足如判别器是字符串、值更冗长等,但在实际编程环境中大多不是问题,还可考虑使用枚举,且真实应用会自然演变成由 ADTs 建模的模式,下一篇文章将用 ADTs 演示类型类和高阶类型(HKTs)。
关键信息:
- 作者日常用 Go 和 TypeScript,常借鉴 Haskell 模式。
- 新工作要跟踪用户动作并序列化事件。
- Haskell 中 ADTs 编码简单。
- TypeScript 中利用
Tagged
和discriminator
实现 ADTs 及存在的不足。 - 可考虑使用枚举替代字符串标签。
- 真实应用会自然演变成 ADTs 模式,下篇介绍类型类和 HKTs。
重要细节:
- 在 TypeScript 中
Tagged
类型根据第二个参数是否为undefined
返回不同类型。 - 实现的
serialize
函数根据e.tag
进行不同的序列化操作。 const
枚举的成员在编译后会变为数字字面量。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。