TypeScript 编译过程中语法树、符号表与类型检查器如何协作,类型为何不会自动保护运行时
简答题困难686 次浏览
参考答案与解析
核心结论
TypeScript 编译不是简单地“删除类型再输出文件”,而是由扫描、解析、绑定、类型检查、转换和生成等阶段协作完成。扫描器把字符流识别为记号,解析器根据语法构造抽象语法树,绑定阶段建立作用域、符号及声明之间的联系,类型检查器据此计算类型关系并产生诊断,最后转换器与生成器输出目标版本的 JavaScript。大多数类型信息在输出阶段会被擦除,所以编译通过只说明源码满足静态模型,并不保证网络响应、用户输入或反序列化数据在运行时符合该模型。
底层机制与决策依据
符号表示某个名称在程序中的身份,类型则描述该值允许的操作与结构,两者并非同一概念。多个声明可能经过合法合并后指向同一个符号;一个表达式的类型也可能由控制
