TypeScript中判断变量是否已设置的更优雅实现方式问询
TypeScript中判断变量是否已设置的优雅方案
首先明确:你这里的“已设置”实际是指变量为真值(非空字符串、非undefined、非null),因为!obj.myVar会把空字符串、undefined、null都判定为“未设置”。针对这个需求,除了你提到的双感叹号和冗余的if分支,还有更直观的方案:
1. 使用Boolean()构造函数(最直观)
这是可读性最高的写法,语义清晰,新手也能一眼看懂:
isMyVarSet(obj: MyObject): boolean { return Boolean(obj.myVar); }
它和双感叹号!!obj.myVar效果完全一致,但避免了符号的歧义,是通用场景下的最优选择。
2. 精确判断(按需选择)
如果你的“已设置”需要严格区分「变量未定义」和「变量是空字符串」,首先应该修正类的类型定义(消除TypeScript的类型歧义):
class MyObject { myVar?: string; // 用可选属性标记变量可能未定义 }
再根据需求选择判断逻辑:
- 仅判断变量是否被定义(不管是否为空字符串):
isMyVarSet(obj: MyObject): boolean { return obj.myVar !== undefined; } - 判断变量已定义且非空:
isMyVarSet(obj: MyObject): boolean { return obj.myVar !== undefined && obj.myVar !== ''; }
方案对比
- 双感叹号
!!:代码最短,但可读性略差,适合熟悉JS/TS的团队场景。 Boolean():兼顾简洁和可读性,是最推荐的通用方案。- 显式判断:最严谨,适合有精确逻辑要求的场景。
- 你之前写的
if分支写法确实冗余,完全没必要使用。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

