dagger TypeScript SDK 中的 HTTPStateID 类型别名:区分对象身份的 Branded 标识类型
DevOpsCI/CD后端CLI云原生【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址https://gitcode.com/GitHub_Trending/da/dagger点击查看免费下载本篇基于仓库中 version-0.21 归档的 TypeScript SDK API 参考文档 HTTPStateID.md完整继承其类型定义与声明内容并结合当前仓库中 SDK 生成代码与多语言运行时源码讲清HTTPStateID这一 branded品牌化类型别名的设计意图、__HTTPStateID: never声明背后的编译期机制以及它与HTTPState对象、loadHTTPStateFromID加载 API 之间的配套关系。读完后可掌握如何在类型层面区分不同 DAG 对象的 ID以及 ID 在 dagger 各 SDK 代码生成中的落地方式。HTTPStateID 的官方定义原文档内容version-0.21 参考文档中对HTTPStateID的完整描述如下这部分是本篇的核心骨架不做删减HTTPStateIDstringobjectA unique identifier for an object.对象的唯一标识符。类型声明部分__HTTPStateID:never对应的完整 TypeScript 形式即/** A unique identifier for an object. */ export type HTTPStateID string { __HTTPStateID: never }它由三部分构成逐一看string运行时载体。ID 在网络层、GraphQL 层传输时就是一个普通字符串dagger 对象 ID 的序列化形式SDK 拿到后直接透传。 { __HTTPStateID: never }品牌brand字段。这个字段的类型是never意味着没有任何值能真正满足它——它永远只存在于编译期不会出现在运行时对象上。文档定位在 version-0.21 TypeScript SDK 参考的类型别名索引中HTTPStateID与其他对象的 ID 别名并列列出HTTPState 对象页与 Client 类页分别说明了它作为通用ID的特化与作为loadHTTPStateFromID入参的角色。Branded 类型为什么 ID 要写成string object从当前仓库的 TypeScript SDK 生成代码可以直接验证这套模式。client.gen.ts 中通用 ID 类型的定义是/** * A unique identifier for an object. */ export type ID string { __ID: never }ID与HTTPStateID是同一模式string交叉一个只含never类型字段的字面量对象。这种写法社区通称 branded type / phantom type / nominal typing的效果是编译期HTTPStateID与string、与其他对象的XxxID互相不可赋值。把一段裸字符串比如用户环境变量里读出来的值直接传给期望HTTPStateID的参数TypeScript 会报类型不兼容——从而杜绝拿错 ID / 伪造 ID这类静默错误。运行时类型别名在编译后完全消失值就是普通字符串序列化、跨进程传输没有任何额外开销。never的作用{ __HTTPStateID: never }中的never保证该品牌字段在类型上不可满足只作为类型系统的标记存在而不是可读写属性。文档中单独列出\_\_HTTPStateID: never这一条声明正是类型文档工具typedoc对交叉类型右侧品牌字段的展开展示。version-0.21 参考文档目录下还并列存在 ContainerID.md、DirectoryID.md、CacheVolumeID.md 等大量同构的按类命名的 ID 别名。从源码结构看该版本为每种核心对象生成了独立的 branded ID 别名使loadXxxFromID一族加载函数各自只接受对应类型的 ID类型系统替调用方做了一层取回对象前先验明身份的约束。HTTPState这个 ID 标识的是什么对象HTTPState在当前仓库 TypeScript SDK 中的定义见 client.gen.ts/** * An internal persistent HTTP state. */ export class HTTPState extends BaseClient { private readonly _id?: ID undefined /** * Constructor is used for internal usage only, do not create object from it. */ constructor(ctx?: Context, _id?: ID) { super(ctx) this._id _id } /** * A unique identifier for this HTTPState. */ id async (): PromiseID { if (this._id) { return this._id } const ctx this._ctx.select(id) const response: AwaitedID await ctx.execute() return response } }几个实现细节值得注意类注释明确写着 An internal persistent HTTP state内部持久化 HTTP 状态构造器注释也强调仅供内部使用不要直接 new。也就是说HTTPStateID主要服务于 SDK 内部的对象寻址而非用户直接构造。id()方法体现了 dagger SDK 的惰性lazy求值模型如果对象已经持有_id通常由上游 API 或loadFromID路径带入直接同步返回否则通过this._ctx.select(id)追加一个id字段查询再await ctx.execute()向引擎发起一次 GraphQL 请求解析出 ID。这与本仓库中其他对象类的id实现一致。当前仓库中HTTPState.id()的返回类型是通用IDbrandedstring { __ID: never }。这与 version-0.21 文档中按类特化的HTTPStateID别名属于同一品牌化设计在不同版本代码生成上的呈现差异见下一节。通过 ID 重建对象loadHTTPStateFromIDversion-0.21 参考文档的 Client 类页记录了与该类型别名配套的核心 APIloadHTTPStateFromID()loadHTTPStateFromID(id):HTTPStateLoad a HTTPState from its ID.id: [HTTPStateID]Returns: [HTTPState]这正是 branded ID 类型的闭环用法HTTPState的id()产出带品牌的 IDclient.loadHTTPStateFromID(id)再凭该 ID 把对象句柄重建出来。基于 0.21 文档描述的 API 面典型使用形态为// 1) 从 HTTPState 句柄取得带品牌的ID const id await httpState.id() // 2) 凭 ID 重建对象若误传其他对象的 ID 或裸 string // 0.21 的类型签名会在编译期直接拒绝 const state client.loadHTTPStateFromID(id)这里的编译期保障即上一节所述id参数的类型是HTTPStateID而该类型只能来自HTTPState.id()或同族 API 的返回值普通string无法通过类型检查。代码生成的跨语言对应HTTPStateID并不是 TypeScript 独有的概念而是引擎 GraphQL schema 中一个标量在各语言 SDK 代码生成里的产物。仓库中可找到多处相互印证Go 生成代码内嵌于各 SDK 运行时type HTTPStateID string以及func (r *Query) LoadHTTPStateFromID(id HTTPStateID) *HTTPState例如 sdk/elixir/runtime/internal/dagger/dagger.gen.go 与 LoadHTTPStateFromID 定义sdk/java、sdk/php、sdk/python 下的同名生成文件内容一致。Go 是动态字符串类型天然无法表达 branded 约束因此对应关系退化为命名上的类型隔离 加载函数入参约束。Elixir SDKhttp_state_id.ex 中defmodule Dagger.HTTPStateID通过use Dagger.Core.Base, kind: :scalar, name: HTTPStateID声明直接印证了HTTPStateID在引擎 schema 侧是kind: :scalar的标量类型。TypeScript SDKTypeScript 是唯一能在类型层面把这种隔离做实的语言所以其生成代码采用string { __X: never }交叉类型而不是简单的string。三者共同说明HTTPStateID的本质是GraphQL 标量 HTTPStateID 在各 SDK 中的本地映射TypeScript 侧的 branded 写法只是这一映射中最强的类型表达。版本适用性说明本文引用的类型别名文档位于归档参考目录docs/versioned_docs/version-0.21/描述的是version-0.21 的 TypeScript SDK API 面该版本按对象类生成独立的*ID别名如HTTPStateID、ContainerID并在Client上提供loadHTTPStateFromID等加载方法。以当前仓库主干代码为准sdk/typescript/src/api/client.gen.ts 中保留的是通用 brandedID类型在sdk/typescript/src/api中未检索到独立的HTTPStateID别名HTTPState类的id()亦返回通用IDclient.gen.ts#L12587。也就是说从源码结构看主干版本的类型别名呈现形态与 0.21 文档存在差异但string { __ID: never }的 branded 设计一脉相承。因此引用本文时请以版本为前提涉及HTTPStateID别名与loadHTTPStateFromID签名的结论适用于 version-0.21 及同形态的归档文档涉及通用ID类型与HTTPState类实现的结论则以当前仓库代码为准。赞分享DevOpsCI/CD后端CLI云原生【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址https://gitcode.com/GitHub_Trending/da/dagger点击查看免费下载相关推荐Dagger TypeScript SDK 的 ID 类型别名对象唯一标识符的 TypeScript 类型系统设计Dagger TypeScript SDK 的 ID 类型别名对象唯一标识符的 TypeScript 类型系统设计 导读 ID 是 Dagger TypeScDevOpsCI/CD后端CLI云原生Dagger TypeScript SDK 中的 HealthcheckConfigID对象唯一标识符类型别名的设计与实战Dagger TypeScript SDK 中的 HealthcheckConfigID对象唯一标识符类型别名的设计与实战 本文围绕 DaggerGitHuDevOpsCI/CD后端CLI云原生Dagger TypeScript SDK 中的 ErrorID 类型别名Error 对象的标识符机制深入解析Dagger TypeScript SDK 中的 ErrorID 类型别名Error 对象的标识符机制深入解析 导读 ErrorID 是 Dagger TDevOpsCI/CD后端CLI云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

硅碳相变硬核拆解:多模型API协议翻译层如何归一SSE流式、错误码与鉴权

硅碳相变硬核拆解:多模型API协议翻译层如何归一SSE流式、错误码与鉴权

硅碳相变硬核拆解:多模型API协议翻译层如何归一SSE流式、错误码与鉴权 如果你正在后端维护一套同时调用 GPT-4o、Claude、通义、DeepSeek 的服务,你大概率已经被同一件事恶心过:四个厂商的接口看起来都叫 Chat Completions,实际接…

2026/10/10 15:06:19 阅读更多 →
MarkText 0.21 所见即所得 Markdown 写作:五分钟上手、公式图表与 PDF 导出(开源免费 Typora 替代实测)

MarkText 0.21 所见即所得 Markdown 写作:五分钟上手、公式图表与 PDF 导出(开源免费 Typora 替代实测)

MarkText 0.21 所见即所得 Markdown 写作:五分钟上手、公式图表与 PDF 导出(开源免费 Typora 替代实测) Typora 转收费后,开源阵营接棒的就是 MarkText(MIT 协议,GitHub 4.7w Star)&#xff1a…

2026/10/10 15:06:19 阅读更多 →
PyTorch CIFAR-10 Kaggle提交实战:训练验证推理全链路闭环

PyTorch CIFAR-10 Kaggle提交实战:训练验证推理全链路闭环

简介:本资源是一份面向深度学习初学者与PyTorch实践者的Kaggle图像分类实战教学包,聚焦CIFAR-10数据集的端到端建模流程,帮助读者掌握从数据加载、模型构建(含CNN/ResNet等结构)、训练调优到提交预测的完整竞赛链路。压…

2026/10/10 15:06:19 阅读更多 →

最新新闻

WSL升级报错Could not write value to key?注册表权限修复全指南

WSL升级报错Could not write value to key?注册表权限修复全指南

如果你也在升级 WSL 时撞上Could not write value to key \SOFTWARE\Classes\Drive\shell\WSL这条报错,先别急着怀疑系统坏了。这个错误出现在 WSL 安装程序向注册表写入资源管理器右键菜单项的阶段,大部分时候不是某个发行版出了问题,而是注…

2026/10/10 16:50:18 阅读更多 →
ClawX v0.1.23:OpenClaw图形化填坑版,20分钟跑通本地大模型

ClawX v0.1.23:OpenClaw图形化填坑版,20分钟跑通本地大模型

ClawX v0.1.23 出来有几天了,这次更新我愿称之为“史诗级填坑版”。如果你之前折腾过 OpenClaw 系工具,大概率卡在过这几个地方:命令行看得头脑发懵、依赖装到一半报错、模型下载到 80% 断掉、好不容易跑起来界面又黑屏。这版 ClawX 基本把这…

2026/10/10 16:50:18 阅读更多 →
LAS点云训练PointNet分类:从数据预处理到模型调优全流程指南

LAS点云训练PointNet分类:从数据预处理到模型调优全流程指南

简介:针对PointNet/PointNet训练自定义LAS点云数据的需求,这套基于PyTorch的代码包提供了完整的分类与语义分割流程。资源以GitHub开源项目Pointnet_Pointnet2_pytorch为基础,重点适配带Classification属性的LAS点云数据,读者可在…

2026/10/10 16:50:18 阅读更多 →
Dify私有化部署实战:Linux服务器+Docker Compose指南

Dify私有化部署实战:Linux服务器+Docker Compose指南

开头从一次真实的部署说起。有段时间我在Linux服务器上反复折腾容器应用,最头疼的还不是容器本身,而是应用之间的依赖关系、初始化顺序、数据卷到底应该怎么挂。后来接触到一个叫 Dify 的开源项目,发现它的定位很有意思:不是普通聊…

2026/10/10 16:50:18 阅读更多 →
回归算法实现家庭用电预测:特征工程与避坑指南

回归算法实现家庭用电预测:特征工程与避坑指南

简介:这是一份机器学习回归算法实战资源,面向数据科学初学者与需要完成课程项目的学生,旨在解决家庭用电量预测问题。资源系统覆盖线性回归、多项式回归、决策树回归、随机森林回归与支持向量回归等主流算法,并涉及缺失值处理、异…

2026/10/10 16:50:18 阅读更多 →
ComfyUI SDXL+Refiner精炼工作流:把出图质感从能看拉到耐看

ComfyUI SDXL+Refiner精炼工作流:把出图质感从能看拉到耐看

简介:ComfyUI/SDXL Refiner 精炼文生图工作流,是一份面向ComfyUI初中级用户的文生图节点流程配置,专门应对SDXL基础模型生成图像时细节表现不足、需要二次精炼出图的场景。压缩包内共1个json格式工作流文件,包体仅4KB&#xff0c…

2026/10/10 16:49:17 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →