在TypeScript中,选项或可选类型(选项)是否有意义?
问题描述:
Haskell,Rust等语言提供Maybe
或Option
类型。即使在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);
这,当然是一个非常简单的例子,在使用选项类型是有点过度设计。不过,它应该给出一个基本的想法。
我目前没有看到为什么这是一个坏主意,但似乎没有人实现它,据我所知。这会对性能产生严重影响吗?还是还有其他问题我看不到这使得这种不可行?
注意:我不是(主要)要求如何实现这一点(虽然这也是一个有趣的话题 - 但我有这方面的想法)。我主要关心的是找出为什么没有人似乎正在使用这样的东西呢。
虽然这是一个很好的讨论主题,讨论将基于意见,因此SO不是举行这种对话的论坛。 :) – toskv
你提到的函数'map'可以这样定义:'map(val:T | null | undefined,f:T - > U):U | null | undefined'且实现很简单,类似于'mapOr',你甚至可以将'T | null | undefined'作为'Option '我认为 –
niceman
这些语言有这些类型的原因是因为它们没有联合类型,但标记了联合(是的,这两个是不同的) – niceman