类型联合并不总是能很好地组合。

主要观点:

  • Typescript 的无标记联合类型更符合人体工程学,能带来更干净的用户端 API,如用 type C = A | B 表示联合类型。
  • 实现可选值 Option<T> ,可以用 type Option<T> = T | undefined ,但此模型不能组合 Option 类型,会导致 none()just(none()) 结果相同。
  • 另一种处理方法是为每种 Option<T> 值添加区分标签,如 type Option<T> = {kind: "just", value: T} | {kind: "none"} ,这样能区分 just(none())none()
  • 更高层次上,带标签的 Option 类型能验证特定属性,即相等值只有来自相同构造函数时才相等,且相等值意味着相等组件。
  • 不用标签的 none() 情况,可直接用 undefined 作为值,通过对象包装实现类似效果,此模型比带标签模型简单,但标签通过对象包装实现。
  • 无标记联合类型的难点在于 T | undefined | undefinedT | undefined 相同,使用时若有重叠,结果类型可能包含的信息比预期少。

关键信息:

  • Typescript 无标记联合类型特点及优势。
  • 实现可选值的不同方式及各自问题。
  • 带标签和不带标签的 Option 类型的比较及属性验证。

重要细节:

  • 举例说明各种 Option 类型的使用及含义,如 just(1)none()option(just(address)) 等。
  • 详细阐述无标记联合类型在组合 Option 类型时的问题及后果。
  • 证明带标签的 Option 类型满足特定属性的过程。
阅读 28
0 条评论