在TypeScript中,选项或可选类型(选项)是否有意义?

问题描述:

Haskell,Rust等语言提供MaybeOption类型。即使在Java中,现在也有一个Optional类型。在TypeScript中,选项或可选类型(选项<T>)是否有意义?

为了简单起见,我将在剩下的问题中称这种类型为“选项类型”。 '可选类型'显然经常用于描述提供类型注释是可选的情况。

我很好奇以下内容:OptionScript类型在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); 

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

我目前没有看到为什么这是一个坏主意,但似乎没有人实现它,据我所知。这会对性能产生严重影响吗?还是还有其他问题我看不到这使得这种不可行?

注意:我不是(主要)要求如何实现这一点(虽然这也是一个有趣的话题 - 但我有这方面的想法)。我主要关心的是找出为什么没有人似乎正在使用这样的东西呢。

+0

虽然这是一个很好的讨论主题,讨论将基于意见,因此SO不是举行这种对话的论坛。 :) – toskv

+0

你提到的函数'map'可以这样定义:'map (val:T | null | undefined,f:T - > U):U | null | undefined'且实现很简单,类似于'mapOr',你甚至可以将'T | null | undefined'作为'Option '我认为 – niceman

+0

这些语言有这些类型的原因是因为它们没有联合类型,但标记了联合(是的,这两个是不同的) – niceman

我失踪它斯卡拉来(和一些Haskell的),所以我做了我自己的lib它(以及一些其他):MM(MIT许可证)

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