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
相关产品推荐
相关产品推荐

