TypeScript Partial接口异常行为:对象与字符串比较为何无类型报错?
问题解答
你没看错,car === "typescript doesn't complain about this"这段比较永远会返回false——car是引用类型的对象,字符串是原始类型,严格相等运算符===不会做类型转换,引用类型和原始类型的严格比较必然不相等,所以分支里的代码确实永远不会执行。
至于TypeScript为什么没提示“该比较始终返回false”,核心原因是它的类型检查规则:
- 当比较的两个类型是无重叠的原始类型(比如
number和string、boolean和number)时,TypeScript会直接提示比较结果永远为false。 - 但当其中一方是对象类型(包括接口、自定义对象类型、
{}这类空对象类型),另一方是原始类型时,TypeScript不会触发这个提示。
这属于TypeScript类型检查的边界情况:虽然运行时结果确定为false,但TypeScript并没有把对象类型和原始类型的严格相等比较归类为“必然无效”的场景,可能是出于历史兼容或类型系统设计的考量。
如果想让这类无效比较被检测到,目前没有直接的编译器选项可以触发,但你可以通过代码规范工具(比如ESLint)添加自定义规则来拦截这类无意义的比较。
内容的提问来源于stack exchange,提问作者haymez
相关产品推荐
相关产品推荐

