Maybe
或 Option
类型。即使在 Java 中,现在也有 Optional
类型。
为了简单起见,我将在剩下的问题中将这种类型称为“选项类型”。 “可选类型”显然经常用于描述提供类型注释是可选的情况。
我很好奇以下问题:Option 类型在像 TypeScript 这样的语言中有意义吗? Option 类型的优点在其他语言中非常有说服力,但我发现自己在使用 TypeScript 编程时缺少该类型。
基本上,类型系统强制您显式解包 Option 值中可能存在的任何值。是的,TypeScript 严格的空检查也可以实现这一点,但是,使用 Option 类型为您提供了一种(在我看来)更好的方法来通过提供
None
和 map(f: T -> U): Option<U>
方法等来处理潜在的 mapOr(f: T -> U, or: U): Option<U>
值。
例如,我希望像下面的代码一样工作:
interface Foo {
member: Option<string>
}
const opt: Option<Foo> = // ... some initialization
const memberLength: number = opt
.map(x => x.member) // None if x is None, else Some(...)
.map(x => x.length) // None if x.member is None, else Some(x.length)
.unwrapOrElse(() => 0);
这当然是一个非常简单的示例,其中使用选项类型有点过度设计。不过,它应该给出一个基本的想法。
我目前不认为这是一个坏主意,但据我所知,似乎没有人实施它。这会对性能产生严重影响吗?还是还有其他我看不到的问题导致此方法不可行?
注意:我不是(主要)询问如何实现这一点(尽管这也是一个有趣的话题 - 但我对此有想法)。我主要关心的是找出为什么似乎还没人使用这样的东西。
对于发现投票最多的答案的人:
请注意:
fp-ts
lib 实际上有点旧(想象一下他们已经将上述模式匹配 github 问题关闭为“未计划”,又名 WONTFIX,wtf)。fp-ts
的作者本人已停止开发它,现在正在开发另一个库:https://github.com/Effect-TS/effect