当前位置: 首页 > article >正文

【Typescript】13-tsconfig与工程化实践

tsconfig与工程化实践很多人学 TypeScript 时会把注意力几乎全部放在语法上泛型会不会写、infer看不看得懂、工具类型会不会用。可真正在工程里决定 TypeScript 上限的往往不是这些而是tsconfig.json。因为它决定了编译器到底有多严格、如何解析模块、怎样理解你的项目边界以及你愿不愿意在开发期就把风险暴露出来。说得直接一点很多团队 TypeScript 用得一般不是因为不会语法而是因为配置太松。tsconfig.json本质上是在定义团队和编译器之间的契约它不是一个“复制粘贴模板文件”而是在回答这些问题我们允许多宽松的类型行为我们的代码会被编译到什么运行环境我们的模块如何解析我们是否把类型检查和构建拆开哪些文件参与编译哪些不参与所以tsconfig本质上体现的是团队对类型安全的态度而不仅仅是工具链配置。一个实用的起点配置{compilerOptions:{target:ES2020,module:ESNext,moduleResolution:Bundler,strict:true,noUncheckedIndexedAccess:true,exactOptionalPropertyTypes:true,skipLibCheck:true}}这不是放之四海而皆准的唯一答案但它代表一种相对成熟的取向尽量让问题在开发期暴露而不是把模糊和侥幸留到运行时。strict是真正开启 TypeScript 的开关如果只记一个配置项那应该是strict。开启strict后TypeScript 会开始认真处理隐式any空值问题不安全赋值宽松的函数参数兼容各类潜在类型漏洞不开strict你当然还是“在用 TypeScript”但很多最有价值的保护其实都被你自己关掉了。如果你在接手老项目不一定能一夜之间把严格选项全开因为历史包袱可能很重。但长期方向应该清晰逐步收紧而不是为了清静持续放松。noUncheckedIndexedAccess能暴露很多被忽略的真实风险看一个例子constmap:Recordstring,number{};constvaluemap[x];不开noUncheckedIndexedAccess时value可能会被推成number开启后它会变成number | undefined。后者更符合现实因为你根本不能保证x一定存在。这个选项非常值得强调因为大量线上 bug 都来自类似思维我以为这个 key 一定有我以为这个数组下标一定取得到我以为这个映射表已经初始化了而 TypeScript 如果不够严格就会默许这些“我以为”。exactOptionalPropertyTypes让可选属性语义更准确很多人对可选属性的理解过于粗糙以为它只是“可以不写”。但从业务上看这通常至少有两层不同含义属性不存在属性存在但值是undefined开启exactOptionalPropertyTypes后TypeScript 会更认真地区分这两种情况。这对这些场景尤其有价值PATCH 更新接口表单回填与提交配置覆盖逻辑DTO 与领域对象转换你会开始更明确地思考这个字段是真的可缺失还是只是值可能为空。skipLibCheck为什么很多项目会开skipLibCheck: true的含义是跳过对依赖库声明文件的完整类型检查。很多项目会打开它原因通常是提升编译性能避免被第三方库声明问题卡住这在工程上是个务实选择但你要知道它的代价你对某些依赖声明问题的感知会下降。所以它适合做性能与稳定性的折中不适合被理解成“这样更安全”。target、module、moduleResolution不只是语法项它们和工具链强相关target决定输出代码面向哪个 JavaScript 运行环境比如ES2017、ES2020。module决定模块输出形式例如ESNext、CommonJS。moduleResolution决定 TypeScript 如何解析模块路径和依赖现代前端项目中常见Bundler或NodeNext。这些配置不是单独存在的它们通常要和你的构建工具、运行环境、测试工具一起考虑。也就是说tsconfig不是纯 TypeScript 世界里的孤岛而是整个工程工具链的一部分。类型检查和打包构建是两回事这是现代前端和 Node.js 项目里非常关键的一层认知。很多人以为运行tsc就等于项目构建但在现在的工具链里事情常常不是这样。例如Vite 可能负责打包Next.js 可能负责编译和路由构建esbuild 或 SWC 可能负责转译tsc --noEmit只负责类型检查所以你需要明确区分谁负责类型检查谁负责代码转译谁负责产物构建否则遇到问题时很容易把责任归错地方。一个成熟项目的 TypeScript 原则真正成熟的 TypeScript 项目通常会坚持几个原则对外暴露的 API 类型明确核心领域对象类型稳定any控制在极少数必要场景对外部不可信数据先做运行时校验再进入类型系统利用工具类型减少重复配置保持尽可能严格其中最容易被忽略的一条是运行时校验。因为 TypeScript 再强也只存在于编译阶段。一个接口只要返回了脏数据单靠类型注解并不会自动拯救你。运行时校验为什么必须和 TypeScript 配套看很多团队学到后面会有一种错觉类型已经写得这么完整了系统应该很安全。实际上这只对“你自己写出来的静态结构”成立对外部世界并不成立。典型风险包括后端返回结构和定义不一致本地存储中的 JSON 被污染URL 参数缺失或格式不对第三方库返回非预期数据这时像 Zod、Valibot 这类运行时校验库就很重要。它们不是和 TypeScript 重复而是在补足 TypeScript 无法覆盖的那一半现实世界。老项目怎么逐步变严格如果你现在面对的是一个历史包袱很重的项目不必一口气把所有配置拉满。更务实的方式是先开启strict清理最危险的隐式any逐步引入更精确的空值和索引访问检查对新增模块要求更高对存量模块渐进改造类型治理本身就是工程治理不可能永远靠一次性重写完成。本文小结TypeScript 的工程质量不只由你会不会写语法决定更由配置和团队边界决定。tsconfig.json不是一个“项目启动时顺手拷来的配置文件”它实际上定义了整个代码库对风险的容忍度和对类型安全的投资力度。你可以把它理解成一种工程立场到底是愿意在开发期多面对一些报错还是愿意把更多不确定性留到运行时。成熟团队通常会选择前者。练习新建一个tsconfig.json手动解释target、module、strict、noUncheckedIndexedAccess、exactOptionalPropertyTypes的含义。找一个老项目看看是否开启了strict并评估如果要逐步收紧配置第一步最适合做什么。思考哪些运行时错误仅靠 TypeScript 不能解决你会如何用运行时校验工具补上这一部分。后记2026年5月22日于上海。

相关文章:

【Typescript】13-tsconfig与工程化实践

tsconfig 与工程化实践 很多人学 TypeScript 时,会把注意力几乎全部放在语法上:泛型会不会写、infer 看不看得懂、工具类型会不会用。可真正在工程里决定 TypeScript 上限的,往往不是这些,而是 tsconfig.json。因为它决定了编译器…...

【Typescript】12-模块声明文件与第三方库

模块、声明文件与第三方库 当你开始把 TypeScript 真正放进项目里,就会很快遇到一些不再是语法层面的现实问题: 代码和类型应该如何跨文件组织第三方库没有类型时怎么办为什么有些包能直接提示类型,有些却报“找不到声明文件”.d.ts 到底是什…...

【Typescript】11-类抽象类与面向对象建模

类、抽象类与面向对象建模 TypeScript 不是一门纯粹的面向对象语言,但它对类系统的支持足够完整,足以覆盖很多工程场景。问题在于,很多人学到 class 之后,会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反&#xff1…...

Perplexity反义词≠低困惑度?——斯坦福NLP实验室内部培训材料首次公开的4层认知陷阱

更多请点击: https://kaifayun.com 第一章:Perplexity反义词≠低困惑度?——认知错位的根源剖析 Perplexity(困惑度)是语言模型评估中被广泛误读的核心指标。许多人直觉认为“低困惑度即好模型”,甚至将“…...

AI生成镜头如何通过DIT审核?——Netflix《The Last Frame》技术白皮书首度公开(附VFX合规性检查清单PDF)

更多请点击: https://kaifayun.com 第一章:AI视频生成在电影制作中的应用 AI视频生成技术正深刻重构电影工业的工作流,从前期预演到后期特效,再到个性化内容分发,其渗透已覆盖创作全生命周期。传统依赖高成本实拍与手…...

Sora 2提示词失效真相大起底(92%用户踩中的3类语义断层陷阱)

更多请点击: https://kaifayun.com 第一章:Sora 2提示词失效的底层归因与认知重构 Sora 2提示词失效并非表层的语法错误或格式偏差,而是源于其多模态对齐机制中语义解码器与时空生成器之间的结构性错配。当用户输入“雨夜东京涩谷十字路口&a…...

【Sora 2批量视频生成黄金工作流】:实测吞吐提升4.8倍的关键配置——NVIDIA A100集群下每小时稳定输出217段1080p视频

更多请点击: https://codechina.net 第一章:Sora 2批量视频生成工作流全景概览 Sora 2作为新一代多模态视频生成模型,其批量处理能力依托于模块化、可编排的端到端工作流设计。该工作流融合提示工程、时空 latent 编码、分块并行解码与后处理…...

从零开发游戏需要学习的c#模块,第二十一章(精灵动画 —— 让角色走起来)

今天我们要学习的内容是 理解精灵图集的原理 加载精灵图集并切帧 实现四方向行走动画 静止时显示待机帧 第一步:准备精灵图集 精灵图集就是一张大图里包含多个小图(帧),播放时依次显示每一帧,形成动画效果。 一…...

黎曼猜想:哲学 × 数学 思维范式全链条

黎曼猜想:哲学 数学 思维范式全链条 华夏之光永存|七大数学猜想思维范式全链条 第二篇开篇 黎曼猜想被公认为数学史上最伟大的未解难题。希尔伯特曾说:“如果我沉睡百年后醒来,第一个问题就是:黎曼猜想证明了吗&…...

P vs NP:西方哲学 × 西方计算理论 —— 人类思维的终极边界

P vs NP:西方哲学 西方计算理论 —— 人类思维的终极边界 华夏之光永存|七大数学猜想思维范式全链条 第一篇开篇 P vs NP 是计算机科学第一难题,克雷数学研究所七大千禧年难题之一。 本文不宣称证明、不跳步、不民科、不超纲。 只用哲学与数…...

暗黑破坏神2存档编辑器完整指南:三步轻松修改D2/D2R角色与装备

暗黑破坏神2存档编辑器完整指南:三步轻松修改D2/D2R角色与装备 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备却一无所获?是否因为早期加点失误导致角色后期无法应…...

HS2-HF_Patch:Honey Select 2 终极汉化与功能增强完整指南

HS2-HF_Patch:Honey Select 2 终极汉化与功能增强完整指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch 是专为 Honey Select 2 游戏…...

在Nodejs后端服务中集成稳定可靠的大模型能力

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Nodejs后端服务中集成稳定可靠的大模型能力 应用场景类,针对需要构建智能对话或内容生成功能的后端工程师&#xff0…...

CANN/pypto copysign函数API文档

# pypto.copysign 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A…...

app应用接入广告的完整流程和方法:从零搭建可持续变现体系

随着移动互联网进入存量竞争阶段,用户流量增长趋于饱和,单纯依靠用户新增实现产品增值的模式已然失效。对于绝大多数免费工具、社交、资讯、游戏类 APP 而言,合规、稳定、可持续的广告变现,已经成为补齐产品商业闭环、维持产品长期…...

2026 主流技术栈:hermes agent多环境安装配置:Windows/Mac/Linux

一、Hermes agent 大模型选择 Hermes Agent 通过统一的模型抽象层接入不同厂商的大语言模型服务。实际部署时,建议根据数据合规要求、任务类型和成本预算进行选型。 1.1 国内场景:Kimi K2.6 对于数据需境内处理或存在私有化部署需求的场景&#xff0c…...

机器学习评价指标之综合指标的关系

综合指标的关系宏平均考虑每个类别的个别表现,并对它们的评价指标(比如准确率、召回率等)进行平均。每个类别 被视为同等重要,无论类别的大小或样本数量。微平均则关注整体表现,它将所有类别的预测结果合并起来&#x…...

红黑树完全指南:从五条性质到完整插入删除实现

引言在前面的树系列中,我们学习了二叉搜索树(BST)和 AVL 树。AVL 树通过严格的平衡条件(|BF| ≤ 1)保证 O(log n) 的性能,但代价是删除操作可能触发 O(log n) 次旋转。红黑树(Red-Black Tree&am…...

10个sd-webui-regional-prompter实用技巧:从基础分割到高级2D区域配置

10个sd-webui-regional-prompter实用技巧:从基础分割到高级2D区域配置 【免费下载链接】sd-webui-regional-prompter set prompt to divided region 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-regional-prompter sd-webui-regional-prompter是一…...

混合专家MoE拆解:GPT-4、千问、DeepSeek为什么都选这个架构

去年我写了个小模型做文本分类,全部参数只有1.5B,单卡就能跑。结果效果还行,但跟大模型比就是被吊打。 我就想,为什么那些几百B甚至上T参数的大模型,推理速度没比我的小模型慢一万倍? 答案就在MoE&#x…...

创业公司如何利用 Taotoken 统一管理多个 AI 模型服务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 创业公司如何利用 Taotoken 统一管理多个 AI 模型服务 对于资源有限的创业团队而言,快速验证产品想法、迭代功能是生存…...

WireUI颜色选择器和日期选择器:提升用户体验的利器 [特殊字符][特殊字符]

WireUI颜色选择器和日期选择器:提升用户体验的利器 🎨📅 【免费下载链接】wireui TallStack UI components 项目地址: https://gitcode.com/gh_mirrors/wi/wireui WireUI颜色选择器和日期选择器是Laravel Livewire应用中提升用户体验的…...

为内部知识问答系统构建基于多模型聚合的智能回复引擎

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识问答系统构建基于多模型聚合的智能回复引擎 在构建面向企业内部的智能知识问答系统时,一个核心挑战是如何在…...

互联网大厂 Java 求职面试实战:音视频场景中的技术挑战

互联网大厂 Java 求职面试实战:音视频场景中的技术挑战在这个互联网飞速发展的时代,越来越多的求职者走进了大厂的面试现场。今天,我们将跟随一位搞笑的程序员燕双非,来看看他在面试中的表现,以及他如何应对各种技术问…...

Rufus技术演进:从Windows 7告别到现代USB启动盘工具的重构之路

Rufus技术演进:从Windows 7告别到现代USB启动盘工具的重构之路 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 在开源工具生态中,技术栈的更新换代往往伴随着兼容性的艰难…...

【收藏干货】2026年AI Coding全面爆发!程序员终极职业升级攻略,告别被替代焦虑

2026年,AI编码技术迎来规模化落地爆发期,行业彻底告别“人工纯编码”的传统模式。对于所有程序员而言,当下最核心的生存与发展策略,早已不是埋头敲代码,而是从“被动写代码的执行者”全面升级为“主动驾驭AI的价值创造…...

MySQL高频面试题-02

这一篇的主题:日志双写机制、深分页瓶颈,以及死锁怎么查。上次和大家聊了 B 树和 MVCC,今天这篇我们直接上硬菜。在社招或者大厂面试中,面试官往往不满足于只问你“什么是索引”,他们更喜欢切入高并发、大数量、分布式的真实场景。…...

MySQL 高频面试题-01

在去面试之前,很多人天天背“八股文”,结果一到现场被面试官稍微一变形就问懵了。比如:“你天天说 B 树,那为什么不用 B 树?不用红黑树?它俩到底差在哪?”“既然索引能加速,那我把所…...

Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景

Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景 【免费下载链接】Structured3D [ECCV20] Structured3D: A Large Photo-realistic Dataset for Structured 3D Modeling 项目地址: https://gitcode.com/gh_mirrors/st/Structured3D 如果你正在…...

电子书转有声书完整指南:一键实现1158种语言的AI语音合成

电子书转有声书完整指南:一键实现1158种语言的AI语音合成 【免费下载链接】ebook2audiobook Generate audiobooks from e-books, voice cloning & 1158 languages! 项目地址: https://gitcode.com/GitHub_Trending/eb/ebook2audiobook 你是否曾希望将心爱…...