为何传入undefined替代接口类型值时IDE未报错?
TypeScript中Getter返回Undefined不报错但返回空对象报错的原因
我写了下面这段TypeScript代码,IDE完全没报错,但明明返回undefined应该被禁止才对:
interface A { z:string; } const b: { field: A } = { get field(){ return undefined; } }
但当我改成返回空对象时,IDE却正常报错了:
interface A { z:string; } const b: { field: A } = { get field(){ return {}; } }
原因解析
这是TypeScript对getter返回值的检查规则导致的:
- 对于getter,TypeScript默认会放宽对
undefined/null的检查,即便你声明的属性类型是A(不包含undefined),返回undefined也不会触发报错——除非你开启了strictNullChecks并明确约束类型为非空(比如A而非A | undefined),或者手动添加非空断言。 - 而返回空对象
{}时,TypeScript能直接检测到这个值缺少A接口要求的z属性,属于结构类型完全不匹配的基础错误,这类检查不会被放宽,所以会正常抛出报错。
简单总结:TypeScript对getter的undefined返回有特殊宽松处理,但空对象不符合接口结构的问题是硬错误,不会被忽略。
内容的提问来源于stack exchange,提问作者Vitalie
相关产品推荐
相关产品推荐

