
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),仅供参考