十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

temporal-spec 类型包使用指南:让 TypeScript 6.0 以下项目获得准确 Temporal 类型

temporal-spec 类型包使用指南:让 TypeScript 6.0 以下项目获得准确 Temporal 类型 temporal-spec 类型包使用指南让 TypeScript 6.0 以下项目获得准确 Temporal 类型【免费下载链接】temporal-polyfillA lightweight polyfill for Temporal, successor to the JavaScript Date object项目地址: https://gitcode.com/gh_mirrors/tempo/temporaltemporal-spec 是一个只包含类型声明的 TypeScript 类型包专门为 Temporal——JavaScript Date 的官方继任者——提供一套与规范完全对齐的类型定义。在 TypeScript 6.0 之前编译器并没有内置任何 Temporal 类型项目里到处是any或自造的残缺类型。本指南将带你快速掌握 temporal-spec 的安装方法、两种引入方式与配置技巧让你的项目在 TypeScript 6.0 以下也能拥有准确、完整的 Temporal 类型体验。为什么需要 Temporal 类型包Temporal 是 TC39 的 Stage 4 提案旨在彻底修复 JavaScriptDate对象的诸多历史问题时区混乱、月份从 0 开始、不可变类型缺失等等。它提供了Instant、ZonedDateTime、PlainDate、PlainTime、Duration等一系列新类型。问题在于TypeScript 6.0 之前没有任何版本的 TypeScript 自带 Temporal 类型。过去各个实现都各自维护一份声明文件彼此之间经常漂移、不一致。temporal-spec 正是为了解决这一痛点而生——它把完整、准确的 Temporal 类型声明集中到一个独立的、零依赖的包里任何 polyfill、实现或普通应用都能共享同一套类型。temporal-spec 是什么纯类型、零运行时开销 temporal-spec 包内只有.d.ts声明文件没有任何运行时代码。它描述的是 Temporal API 的完整形状外加Intl和Date上新增的 Temporal 相关类型。因此对绝大多数项目来说它应该作为devDependency安装不会给你的打包产物增加一个字节。你可以在仓库的spec/目录下直接查看这些类型声明命名空间版本的主声明spec/index.d.ts全局版本的主声明spec/global.d.ts官方说明文档spec/README.md版本历史spec/CHANGELOG.md一键安装步骤 ⚡安装非常简单只需要一条命令npm install temporal-spec由于它只包含类型声明建议作为开发依赖安装npm install -D temporal-spec如果需要查看源码、文档也可以克隆仓库到本地git clone https://gitcode.com/gh_mirrors/tempo/temporal两种引入方式按需选择 temporal-spec 提供了两个入口区别在于你是否想让Temporal成为全局类型。方式一命名空间式无全局污染推荐库作者使用显式导入Temporal命名空间没有任何副作用不会触碰全局 TypeScript 作用域import type { Temporal } from temporal-spec function format(zdt: Temporal.ZonedDateTime): string { return zdt.toString() }这种方式适合组件库、工具库等需要保持环境干净的场景。方式二全局式模拟原生 API 行为通过副作用导入来增强全局作用域让Temporal无需显式导入即可在任意位置使用这模拟了未来原生 API 落地后的行为import temporal-spec/global function format(zdt: Temporal.ZonedDateTime): string { return zdt.toString() }如果你的项目同时在使用 temporal-polyfill 这个轻量级 polyfill体积不到 20 kB规范符合度近乎完美组合起来效果最佳import temporal-polyfill/global // 运行时 polyfill import temporal-spec/global // 类型声明TypeScript 6.0 时 console.log(Temporal.Now.zonedDateTimeISO().toString())polyfill 的完整说明见 polyfill/README.md。类型覆盖范围完整且准确 ️两个入口都覆盖了提案的完整 API 表面Temporal命名空间Instant、ZonedDateTime、PlainDate、PlainTime、PlainDateTime、PlainYearMonth、PlainMonthDay、Duration、Now以及所有配套的*Like和 options 类型。Intl.DateTimeFormat增强让format、formatToParts、formatRange、formatRangeToParts都能接受 Temporal 对象作为参数。Date.prototype.toTemporalInstant命名空间入口还导出了一个独立的toTemporalInstant函数方便把旧式Date值桥接进 Temporal 世界。这些声明源自 TypeScript 项目官方的lib文件esnext.temporal.d.ts、esnext.intl.d.ts、esnext.date.d.ts并采用 Apache-2.0 协议发布准确性和权威性都有保障。TypeScript 6.0 以上的另一种选择 ✨如果你已经升级到TypeScript 6.0好消息是编译器已经在内置lib中打包了 Temporal 类型esnext.temporal。此时你只需在tsconfig.json中启用对应的 lib甚至可以不安装任何类型包{ compilerOptions: { lib: [esnext.temporal, esnext.intl, esnext.date] } }不过 temporal-spec 在以下场景依然不可替代场景为什么需要 temporal-specTypeScript 6.0没有内置 Temporal 类型必须外挂类型包想要命名空间式非全局类型lib只提供全局形式不提供命名空间导入你是 polyfill / 实现作者类型与使用者各自的 TypeScript 版本解耦永不失同步给 polyfill 作者的建议 ️如果你正在构建自己的 Temporal 实现temporal-spec 能让你用与全社区一致的声明文件来检查你的类型输出而不是复制一份慢慢与规范脱节的副本。做法是依赖它把你的公开类型指向Temporal命名空间随着提案演进持续保持同步即可。小结 关键点说明包类型纯.d.ts类型声明零运行时开销安装npm install -D temporal-spec命名空间入口import type { Temporal } from temporal-spec全局入口import temporal-spec/global适用版本主要面向 TypeScript 6.0配套方案与 temporal-polyfill 搭配使用效果最佳无论你是想在 TypeScript 6.0 以下的项目中提前体验 Temporal 的完整类型还是作为库作者需要一套稳定、权威的类型底座temporal-spec 都是值得一试的轻量选择。现在就安装它告别any满天飞的类型地狱吧【免费下载链接】temporal-polyfillA lightweight polyfill for Temporal, successor to the JavaScript Date object项目地址: https://gitcode.com/gh_mirrors/tempo/temporal创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表