## 分析  这里的`val`是一个可选参数,所以`val`可能为`undefined`。 这其实是`ts`的静态类型检查跟`js`中比较操作符的类型转换比较不同导致。 在`js`中`val > 12`,在`val`是`undefined`时,会将`undefined`转换为数字类型`NaN`,而`NaN > 12`的结果是`false`(因为`NaN`不和任何值相等)。 在`ts`编译时会进行严格的类型检查,包括对可能为`undefined`的值的处理。`ts`的静态类型检查器不允许在可能为`undefined`的变量上执行不安全的比较操作。 ## 举例 `ts`这样设计其实也是有道理的,例如: function isGreaterThanThreshold(value, threshold) { return value > threshold; } const value = undefined; // 或者没有设置值 const threshold = 10; const result = isGreaterThanThreshold(value, threshold); if (result) { console.log("value > threshold"); } else { console.log("value { if (val == 2 || val > 12) { } }; 这样val就是一个可选的参数了