0Pricing
TypeScript Academy · 课时

Option 与 Maybe 类型

明确地对值的存在或缺失进行建模。

Option 与 Maybe 类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

表示缺失

有时值可能只是不存在,并没有需要报告的错误。选项类型(也称为“可能值”)明确表示值的存在或缺失,是 null 和 undefined 的一种替代方案。

定义选项类型

选项类型是一个带有 some 标签的判别联合。当 some 为 true 时存在一个值;当它为 false 时则没有任何值。

type Option<T> =
  | { some: true; value: T }
  | { some: false };

构造函数

使用 some 和 none 辅助函数可以轻松创建选项值,这与结果类型中的 ok/err 相对应。

const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };

返回选项类型

可能查找不到结果的查找操作会返回选项类型,而不是 T | undefined。可选性的意图会在类型中明确表达。

function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
  const hit = arr.find(pred);
  return hit === undefined ? none : some(hit);
}

基于 some 进行类型收窄

检查 opt.some,即可安全访问其中的值。只有在值存在的分支中,编译器才允许读取 value。

const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");

为什么不直接使用 null?

null 和 undefined 很容易被忘记,也容易与其他类型混在一起。显式的选项类型会强制处理缺失情况,并清晰表达这是有意为之的设计。

选项类型与 T | undefined

两者都可以表示缺失,但选项类型是一种有意设计且具有名称的结构,您可以为它附加辅助函数(map、getOrElse),从而促进整个代码库采用一致的处理方式。

// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.

getOrElse 辅助函数

要将选项类型转换为具体值,请为缺失情况提供一个备用值。这样可以将缺失处理集中在一个清晰明确的位置。

function getOrElse<T>(o: Option<T>, fallback: T): T {
  return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0

映射选项类型

map 只会在值存在时转换内部值,在值缺失时保持原状。这样,您就可以串联多个转换,而不必反复进行检查。

function mapOpt<T, U>(o: Option<T>, f: (t: T) => U): Option<U> {
  return o.some ? some(f(o.value)) : none;
}
console.log(mapOpt(some(5), n => n * 2)); // { some: true, value: 10 }

选项类型与结果类型

当缺失不携带原因(例如查找未命中)时,请使用选项类型。当失败带有解释性错误时,请使用结果类型。请根据是否需要传达原因来选择。

组合选项类型

由于选项类型具有 map 和 getOrElse,多个可选步骤组成的链仍然清晰易读,缺失情况会在链中自动短路。

const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102

快速检查

快速检查本课内容。

回顾

选项类型<T> 是 { some: true; value } 或 { some: false },它明确表示缺失,而不是使用 null。使用 some/none 构造,根据 some 进行类型收窄,并使用 getOrElse 和 map 等辅助函数。当缺失不需要原因时,优先使用选项类型;当失败需要原因时,使用结果类型。

常见问题解答

「Option 与 Maybe 类型」课时是免费的吗?

是的 — 「Option 与 Maybe 类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「Option 与 Maybe 类型」这节课中我会学到什么?

明确地对值的存在或缺失进行建模。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Option 与 Maybe 类型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 抛出错误的问题
  2. 结果类型建模
  3. Option 与 Maybe 类型
  4. 铁路导向编程
← 返回 TypeScript Academy