为什么undefined可赋值给void类型?问询TypeScript该例外设计原因
为什么TypeScript严格空值检查模式下允许undefined赋值给void
TypeScript设置这一例外规则完全是基于实际运行逻辑和开发体验的考量,核心原因如下:
- 适配JavaScript原生运行行为
JavaScript 中所有没有显式返回值、或者仅写了return未携带具体返回内容的函数,运行时默认返回的都是undefined。而TypeScript中这类无返回值的函数统一用void标注返回类型,如果禁止undefined赋值给void,就会导致符合JS原生运行规则的代码触发TS类型错误,违背TS作为JS超集的基本设计原则。 - 兼容通用开发场景
TS 定义的大量内置API、高阶函数的回调类型都设置为返回void,比如DOM事件监听回调、数组forEach的回调等。开发中经常会出现这类回调中提前分支终止时写空return的写法,实际返回的就是undefined,如果没有该例外规则,这类非常普遍的写法都会触发类型错误,大幅提高不必要的开发成本。 - 匹配void的类型语义
void本身的类型语义就是“该类型的值不需要被关注、也不允许被读取使用”,和undefined“无值”的底层语义天然匹配。同时因为void类型的值不允许被开发者调用操作,允许undefined赋值给void不会带来任何类型安全风险。
内容的提问来源于stack exchange,提问作者Alexander Pankin
相关产品推荐
相关产品推荐

