You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript是否存在与Kotlin的when()表达式功能对等的语法?

TypeScript 没有内置和 Kotlin when 完全对等的原生语法,但有多种成熟的替代方案,可以完全替代冗长的 if/else if 链式代码,覆盖所有 when 的使用场景:

1. 原生 switch 语句(最通用的基础替代)

switch 本身支持多分支匹配,配合 switch(true) 的写法可以实现和 when 一致的条件判断逻辑,包裹成立即执行函数即可当作表达式使用:

const score = 85
const level = (() => {
  switch (true) {
    case score >= 90: return '优秀'
    case score >= 80: return '良好'
    case score >= 60: return '及格'
    default: return '不及格'
  }
})()

2. 对象映射(适合离散值匹配场景)

如果匹配条件是固定的离散值,用对象字面量实现的映射表写法比 switch 更简洁,天生支持作为表达式直接返回结果:

const role = 'admin'
const permission = {
  admin: '全量权限',
  editor: '内容编辑权限',
  visitor: '只读权限'
}[role] ?? '无权限'

配合空值合并运算符 ?? 可以实现和 when 的 else 分支完全一致的默认兜底逻辑。

3. 自定义工具函数(实现完全等价的 when 体验)

如果需要和 Kotlin when 完全一致的使用体验,可以自己实现一个轻量工具函数,TypeScript 的泛型可以完美支持类型推导:

function when<T, R>(
  input: T,
  cases: Array<[condition: (val: T) => boolean, result: () => R]>,
  defaultResult: () => R
): R {
  for (const [condition, getResult] of cases) {
    if (condition(input)) return getResult()
  }
  return defaultResult()
}

// 使用示例
const num = 7
const numType = when(num, [
  [v => v < 0, () => '负数'],
  [v => v === 0, () => '零'],
  [v => v < 10, () => '个位数正数']
], () => '多位数正数')

内容的提问来源于stack exchange,提问作者Christoph Grimmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 11:45:07