OptionScript中的Option或Optional类型(Option <t>)是否有意义?

时间:2017-05-30 16:02:49

标签: typescript optional

Haskell,Rust等语言提供MaybeOption类型。即使在Java中,现在也有Optional类型。

为简单起见,我会将此类型称为&#39;选项类型&#39;在剩下的问题中。 &#39; 可选类型&#39;显然通常用于描述提供类型注释是可选的情况。

我对以下内容感到好奇: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);

这当然是一个非常简单的例子,其中使用Option类型有点过度设计。不过,它应该提供一个基本的想法。

我目前还没有看到为什么这会是一个坏主意的原因,但据我所知,似乎没有人实施过它。这会对性能造成严重影响吗?或者是否有任何其他问题我无法看到这使得它不可行?

注意:我(主要)不是要求如何实现这一点(虽然这也是一个有趣的话题 - 但我对此有所了解)。我主要担心的是找出为什么似乎没有人使用这样的东西。

1 个答案:

答案 0 :(得分:7)

我错过了它来自Scala(和一些Haskell)所以我为它创建了自己的lib(以及其他几个):MM(麻省理工学院许可证)

随意破解,分叉......;这是麻省理工学院的许可