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

ant*_*nty 8 optional typescript

像Haskell,Rust等语言提供MaybeOption类型.即使在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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bru*_*der 9

我错过了它来自Scala(以及一些Haskell)所以我为它创建了自己的lib(以及其他几个):MM(MIT许可证)

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