【发布时间】:2020-08-22 01:50:48
【问题描述】:
所以我正在阅读关于联合类型的 Typescript 官方文档,我认为它与 F# 中的“可区分联合”相同(假设它们具有不同的语法但相同的概念),因为我有 F# 背景和鉴于两者都得到了微软的支持。但是查看文档,F# 并没有真正区分“联合类型”和“有区别的联合”:https://fsharpforfunandprofit.com/posts/discriminated-unions/
但是,Typescript 确实区分了这两个概念:
联合类型:https://www.typescriptlang.org/docs/handbook/advanced-types.html#union-types
歧视工会:https://www.typescriptlang.org/docs/handbook/advanced-types.html#discriminated-unions
所以我想知道这些概念本身是否真的有区别,或者只是一些依赖于语言的概念?
目前我的理解是,F# 中的联合类型也是可区分联合,因为您可以使用匹配表达式和解构来区分联合类型。
但是,您不能使用 Typescript 进行区分,因为该语言没有提供特定的表达式来做到这一点,因此您需要通过一个值来区分,所有联合类型都具有判别式。这是正确的吗?
【问题讨论】:
-
是的,TS 中的判别式只是您选择的任意对象属性。对于有区别的或标记的联合,您不需要这个,因为类型本身携带了这些信息。由于在编译期间不会删除标记,因此您可以在运行时对其进行模式匹配。
标签: typescript functional-programming f# union-types