gpt4 book ai didi

typescript - Option 或 Optional 类型 (Option) 在 TypeScript 中有意义吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:55 80 4
gpt4 key购买 nike

Haskell、Rust 等语言提供了一个 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);

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

我目前看不出这是一个坏主意的原因,但据我所知,似乎没有人实现过它。这会对性能产生严重影响吗?还是有任何其他我看不到的问题使它不可行?

注意:我(主要)不是在询问如何实现它(尽管这也是一个有趣的话题——但我对此有想法)。我主要关心的是找出为什么似乎还没有人使用这样的东西。

最佳答案

编辑 2019

检查 fp-ts

原始答案

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

随意破解、 fork 等……;它是麻省理工学院许可的

关于typescript - Option 或 Optional 类型 (Option<T>) 在 TypeScript 中有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44266974/

80 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com