TypeScript凭什么?从Claude Code 51万行源码泄露说起
Claude Code源码泄露这事,过几个月热度就会消散。但它揭示出的那些底层规律——语言为什么这样设计、工程约束如何驱动语言演化、自由与纪律如何在每个时代重新博弈——这些东西不会过时。理解了这些规律,下次再出现类似的技术新闻,你的反应不会是"居然用TypeScript?",而是"当然用TypeScript,不然用什么"。再下一次出现新语言、新框架、新范式的时候,你也能判断:这东西是在回应什么痛点
昨天,Anthropic把自己扒了个精光。
不是比喻,是字面意思——51.2万行Claude Code源代码,1900多个文件,因为一个npm包里多塞了个source map文件,直接裸奔在全球开发者面前。安全研究员发现的时候,GitHub上的fork速度比Anthropic的公关反应还快。
技术圈炸了锅,安全圈痛心疾首,投资圈默默重新评估这家3500亿美元估值公司的运维能力。
但我注意到的是另一件事。“等等,Claude Code是TypeScript写的?”
51万行TypeScript,不是JavaScript
这个细节值得拎出来说。
Claude Code是Anthropic最拿得出手的产品之一,一个能读写本地文件、执行终端命令、协调多模型完成复杂编程任务的AI Agent。这玩意儿不是个玩具demo,是工业级的、要在千万开发者机器上跑的命令行工具。
这种级别的项目,Anthropic选了TypeScript。
为什么不是JavaScript?毕竟TypeScript最终编译出来的还是JavaScript,多套一层编译器,多一堆类型标注,开发时要多写不少代码。图什么?
图的是活着。
51万行代码,1900个文件,涉及权限控制、沙箱机制、上下文管理、工具调用循环、多模型协同路由、遥测监控……这种规模的工程,如果用纯JavaScript写,不出三个月,团队里没人能看懂自己三个月前写的代码。
JavaScript的灵活是出了名的。一个变量可以是数字,可以是字符串,可以是函数,可以是undefined,也可以是一个你完全没预料到的东西。小项目里这叫自由,大项目里这叫地雷。你调一个函数,返回值是什么类型?参数该传什么结构?接口约定是什么?全靠口头约定和注释——而注释这东西,程序员都知道,它是代码里最先腐烂的部分。
TypeScript解决的就是这个问题。**它用静态类型系统给51万行代码上了一道安全网。**每个函数的输入输出、每个对象的结构、每个模块的接口契约,全部白纸黑字写在类型声明里。编译器替你盯着,写错了当场报错,不用等到线上炸了才知道。
这不是个新故事
我之所以对这个细节格外敏感,是因为它印证了编程语言发展史上一个反复出现的规律——自由度和工程纪律之间的永恒拉锯。
JavaScript诞生于1995年,Brendan Eich用十天赶工出来的。十天。这个语言从出生那天起就没打算做大型工程开发,它的设计目标是让网页设计师能在浏览器里加点交互效果。动态类型、弱类型、原型链继承、this指向的玄学——这些特性放在"给网页加个弹窗"的场景下完全够用,甚至显得灵巧。
然后互联网爆发了。Node.js出现了。JavaScript被推上了服务器端、桌面端、移动端、命令行工具……它被迫承担了设计者从未想过的职责。代码量从几百行膨胀到几十万行,团队从一个人变成几百人。
JavaScript开始撑不住了。
2012年,微软的Anders Hejlsberg(对,就是设计了Turbo Pascal、Delphi、C#的那位)推出了TypeScript。不是要取代JavaScript,而是给它加一层类型系统的"脚手架"。你写TypeScript,编译器帮你检查完类型,再吐出干净的JavaScript去执行。运行时的灵活性一点没丢,但开发时的安全性大幅提升。
TypeScript对JavaScript做的事,和C++当年对C做的事,逻辑上一脉相承。
1970年代,Dennis Ritchie在贝尔实验室搞出了C语言。C给了程序员操控内存的完全自由——指针算术、手动malloc/free,想怎么来怎么来。写操作系统、写编译器、写嵌入式固件,C是把锋利无比的手术刀。
然后软件规模爆炸了。几百万行的项目出现了。C的自由变成了噩梦:悬垂指针、缓冲区溢出、内存泄漏、无法管理的全局状态……Bjarne Stroustrup在1979年开始给C加上类、加上封装、加上继承、加上类型检查更严格的特性,这就是C++。
C++没有抛弃C的能力,但给它加上了大型工程所需的结构和纪律。
再往后看,C++自身的复杂度也开始失控。模板元编程的黑魔法、手动内存管理的心智负担、未定义行为的地雷阵——"天下苦C++久矣"绝不是一句玩笑。2010年代,Rust出现了,用所有权系统和借用检查器,在编译期就把内存安全问题堵死,不用垃圾回收器,不牺牲性能。
每一种新语言都不是凭空冒出来的。它是前一代语言在更大规模、更复杂场景下暴露痛点之后,工程界给出的回应。
FORTRAN → C → C++ → Rust,这是系统编程的演化线。
JavaScript → TypeScript,这是Web/Node生态的演化线。
Java的冗长 → Kotlin的简洁,这是JVM生态的演化线。
Objective-C的古怪 → Swift的现代化,这是Apple生态的演化线。
同样的剧本,不同的舞台,反复上演。
泄露的代码里藏着语言设计的胜负手
回到Claude Code。
泄露的源码里,研究者发现了大量TypeScript的高级特性运用:严格的接口定义、泛型约束、联合类型和类型守卫、枚举和字面量类型……这些不是花拳绣腿,是51万行代码能在几百人的团队里保持可维护性的根基。
想象一下Claude Code的工具调用循环:AI模型输出一段指令,Agent要解析指令、匹配到对应的工具函数、校验参数、执行操作、处理错误、把结果格式化后送回模型。这个循环里任何一个环节的类型不匹配——比如模型返回了一个预期之外的字段结构,或者工具函数拿到了错误类型的参数——都可能导致整个Agent崩溃,甚至在用户机器上执行出灾难性的操作。
JavaScript能干这个活吗?能。但你得用大量的运行时检查、防御性编程、单元测试来兜底。TypeScript把这些工作的一大部分前移到了编译期,用类型系统帮你兜底。编译不过,就上不了线。
语言的选择,从来不是信仰问题,是工程生死问题。
这也是为什么,当我看到Claude Code用TypeScript实现时,一点都不惊讶。惊讶的是居然还有人惊讶。
语言选择的背后,是七十年的积累
但说实话,如果只是"大项目该用静态类型语言"这种层面的认知,那任何一篇技术博客都能告诉你。
真正有意思的问题是更深一层的:为什么编程语言的演化会反复呈现这种"自由→混乱→加约束→新的自由"的螺旋? 为什么几乎每种流行语言都会在某个阶段面临"规模化"这道坎?为什么有些语言跨过去了(C → C++),有些语言需要外力续命(JavaScript → TypeScript),有些语言直接被后来者取代(Objective-C → Swift)?
这些问题,单看一门语言的文档或教程,永远找不到答案。
你得把视角拉到七十年的时间尺度上,从1950年代FORTRAN团队和IBM的博弈开始看,看ALGOL如何在学术理想和工业现实之间撕裂,看C如何在贝尔实验室的特殊土壤里长出来,看Smalltalk的面向对象理念如何被C++和Java各取所需地"翻译"成完全不同的实现,看函数式编程如何在被冷落三十年后借Rust和Swift重新杀回主流。
你还得从多个维度交叉去看——时间维度、设计哲学维度、编程范式维度、工程实践维度、人物和动机维度、生态和影响维度、横向对比维度。单一维度看到的是一门语言的说明书,多维度交叉看到的,才是一整部技术文明的演化史。
我手边有一本书,做的就是这件事。
《代码的文明:编程语言如何改变历史》
这本书的作者李杨,腾讯十余年一线工程师,深度掌握超过10种编程语言,带队做过QQ、腾讯课堂等大型项目。他花了一年半时间,把从1950年代到2024年、跨越七十年的40多种编程语言的诞生、演化、传承和分化,系统地梳理成了一部完整的编程语言文明史。
我读这本书的时候,脑子里反复浮现的就是Claude Code这类事件背后的逻辑。
比如TypeScript为什么成功,书里从JavaScript的十天赶工讲起,到它被Node.js推上服务器端的意外,到Anders Hejlsberg操刀设计TypeScript时从C#带来的设计经验,再到TypeScript如何在不破坏JavaScript生态的前提下渐进式引入类型系统——这条脉络串起来,你就明白TypeScript的胜利不是偶然的,它是JavaScript在特定历史阶段必然会催生出的产物。
比如Rust凭什么能让白宫都出来站台建议替代C/C++,书里从C的内存管理自由度讲起,到C++的RAII尝试,到各种静态分析工具的局限,到Rust所有权系统的设计灵感(部分来自函数式编程的线性类型),再到Rust宏系统的威力和代价——整条因果链条清清楚楚。
更难得的是,作者对每种语言都给了独立、不客气的点评。哪些设计至今超前,哪些特性实战中是坑,哪些语言被高估了,哪些被低估了——这种话,官方文档里读不到,技术博客里也很少有人敢这么直说。
书里还有一章"编程语言人格化",把每种语言写成一个角色的性格描述。读着读着会笑出来,但笑完又觉得,好像确实是这么回事。
Claude Code源码泄露这事,过几个月热度就会消散。但它揭示出的那些底层规律——语言为什么这样设计、工程约束如何驱动语言演化、自由与纪律如何在每个时代重新博弈——这些东西不会过时。
理解了这些规律,下次再出现类似的技术新闻,你的反应不会是"居然用TypeScript?“,而是"当然用TypeScript,不然用什么”。
再下一次出现新语言、新框架、新范式的时候,你也能判断:这东西是在回应什么痛点?它的设计取舍合不合理?它能活多久?
这种判断力,靠刷技术新闻刷不出来。得从七十年的历史里长出来。
📖 《代码的文明:编程语言如何改变世界》
天猫旗舰店:https://detail.tmall.com/item.htm?id=1035582366975
京东旗舰店:https://item.jd.com/10214635204430.html
抖音商城:https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3810536004180378057&origin_type=604
更多推荐



所有评论(0)