类型字符配置
联合国 typescript-config.codecompose.dev 键入脚本
观想和可再用 TypeScript 配置,面向在单发和单发寄存器的现代构建工具.
- 仅使用 TypeScript 编译器进行类型检查 (*)
- 假设您的捆绑输出代码、 源图和类型声明 (*)
- 需要类型脚本 6.0 或更晚
- 建立在 TS6 的严格默认之上, 并带有额外的严格性 :
noUncheckedIndexedAccess, (中文(简体) ),noImplicitOverride,以及erasableSyntaxOnly - 假设
src财务报告和审定财务报表dist目录 - 提供
~/, (中文(简体) ),@/,以及#/路径的别名src - 用途
${configDir}每个项目的零配置
(*)共享-图书馆和共享-图书馆-反应配置是一个例外:它们能够 composite, (中文(简体) ), declaration,以及 declarationMap 因为项目引用需要TypeScript来发布声明. 您的捆绑器仍然处理 JavaScript 输出 .
要成功使用,你需要一个现代化的捆绑机,比如 s您可以检查 类型标记- monorepo 锅炉板,用于以tsdown为单位的现代单列布设置的活例.
这些配置也兼容 走开,TypeScript编译器的本地 Go 端口.
安装
npm i @codecompose/typescript-config -D
使用量
{
"extends": "@codecompose/typescript-config/base"
}
通常,除了 extends。 。 。 .
可用的配置
base- 任何不具体的library——独立库(不属于单列库)library-isomorphic——针对多个Web标准运行时间的独立库(浏览器,RN,工人,德诺,邦,节点)library-react——独立反应组件库(不属于单列)shared-library- 共享的独家图书馆shared-library-react—— 共享的单列回放组件库app-nextjs- Next.js 应用程序service-node——后端服务运行于Node.jsservice-worker——Cloudflare工人的后端服务运行infra-pulumi· 与Pulumi的基础设施编码infra-alchemy与Alchemy的基础设施编码
对于其他项目类型,如CLI或E2E应用程序,您可以使用 base 配置 .
V5 — 运行时间明确的预设
V5重塑了运行时间特定预设,使其目标环境在名称上明确,并增加了Cloudflare Workers,Alchemy和同位素库的新预设.
关于版本号的说明: V4因出版-工作流程事故被跳出
package.json被撞伤到4.0.0合并前的分行,然后工作流程运行major顶起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起起5.0.0。发布5.0.0原打算释放的4.0.0;没有4.x线条.
重命名( 内容不变 —— 只有已移动的导入路径 ) :
| V3 切入点 | V5 切入点 |
|---|---|
@codecompose/typescript-config/service | @codecompose/typescript-config/service-node |
@codecompose/typescript-config/infra | @codecompose/typescript-config/infra-pulumi |
新建预设 :
service-worker形状与service-node不过types: ["@cloudflare/workers-types"]改为["node"]。 。 。 .infra-alchemy用于 炼金术 项目: 项目根上的文件,allowImportingTsExtensions,以及@types/node。 。 。 .library-isomorphic—— 说library随着DOM lib 加上如此全球fetch编号 :Response编号 :Headers输入时没有漏出特定运行时间的约束.
这个 {category}-{runtime} 形状组合在字母列表中的相关预设,并为今后的运行留有空间(service-bun, (中文(简体) ), service-deno, (中文(简体) ), infra-terraform等),不再作更名. 无资格者 service 财务报告和审定财务报表 infra 切入点被去除——没有倒置别名.
V3 — 类型脚本 6
V3是需要TypeScript 6.0或更晚的大型发布.
TypeScript 6 将其默认值与这个软件包一直遵循的严格逐一默认的哲学相一致. 因此,基础配置现在更加精简——现在TS6默认的选项(strict, (中文(简体) ), esModuleInterop已删除,以及 isolatedModules 被删除,因为 verbatimModuleSyntax。 。 。 .
TS6 也默认 types 改为 [],含义 @types/* 软件包不再自动包含。 如果您的工程依赖于环境类型包, 您需要明确添加到您的 tsconfig 中 :
{
"extends": "@codecompose/typescript-config/base",
"compilerOptions": {
"types": ["node"]
}
}
这与严格的违约哲学相一致——类型依赖应该明确.
关于从v2升级的用户,见下文"迁移指南".
从v2 移动
- 需要类型脚本 6 ——与TS5没有后向兼容性
- 删除
strict: true——现在是 TS6 默认 - 删除
esModuleInterop: true安全交叉行为总是在TS6中进行 - 删除
isolatedModules: true——隐含的verbatimModuleSyntax - 删除已注释
baseUrl——在TS6中贬值 - 需要采取的行动: 如果你依赖自动包含
@types/*软件包,添加"types": ["node"](或任何你需要的类型) 到你的tsconfig
假设 Bundler 输出
输出像源图和类型声明一样的输出被禁用,因为人们假设你的捆绑者会处理它. 共享- library 和 共享- library- react configs 是一个例外—— 它们启用 declaration 财务报告和审定财务报表 declarationMap 因为 composite 模式要求它用于工程参考.
递增结构
所有配置都有 incremental 设置为 true根据我的经验,它可以
发生时,建筑会被卡在无边形中, 你需要删除
tsconfig.tsbuildinfo 准备让事情再次发生 为此,我
建议根据 del-cli数字 :
"clean": "del-cli dist tsconfig.tsbuildinfo"
项目参考文献
共享图书馆和共享图书馆反应配置 composite 设置为 true。对于TypeScript“项目引用”来说,需要在单列中工作。 它们提供IDE去定义,而无需输出模块输出.
在实践中,这意味着如果在共享软件包中更改代码,消耗的应用程序或库会接取这些更改,而不需要在共享软件包上设置一个监视任务来触发每次更改上的重建.
没有项目的参考文献,消费代码只会看到 dist 共享软件包的输出.
如果你喜欢在没有项目参考的情况下工作,你应该设置你的捆绑器也 输出声明地图但不是所有的捆绑工都能做到这一点.
向国家预防机制公布
如果您发布您的软件包,建议包含类型脚本源和类型声明地图. 这使得消费者可以直接跳入源代码,这对于整体的可读性和学习性是巨大的.
要导出您 dist 输出旁边的源文件, 您定义 files 字段中的字段 ["src", "dist"]。 。 。 .
洞穴
Next.js v15 要求您明确配置 include。如果只给出"src",它会在启动时注入自己的类型。 我想将来情况会好转.
基础配置包括: "${configDir}/src/**/*.json" 并行 "${configDir}/src" 因为类型脚本 include 只取支持的扩展名( e).ts, (中文(简体) ), .tsx当给定目录路径时。 如果你超过 include 在您的工程 tsconfig 中, 如果您导入 JSON 文件, 请确保保留 JSON glob .