将 jackspeak 从 3.x 升级到 4.x
根据 TypeScript 类型自动比较 jackspeak 3.4.3 与 4.2.3 的公开 API。签名变化表示可能存在不兼容变更,并非确定结论。
概要
| 已删除的导入路径 | 0 |
|---|---|
| 已删除的导出 | 2 |
| 已修改的签名 | 9 |
| 已删除的类或接口成员 | 0 |
| 已修改的类或接口成员 | 9 |
| 新增弃用 | 0 |
| 要求变化(engines、peer 依赖) | 1 |
| 新增导出 | 10 |
已删除的导出
| import | export | kind | 之前 |
|---|---|---|---|
jackspeak | MultiType | type | M extends true ? { multiple: true; delim?: string | undefined; } : M extends false ? { multiple?: false | undefined; delim?: undefined; } : { multiple?: boolean | undefined; delim?: string | undefined; } |
jackspeak | ConfigOptionBase | type | { type: T; short?: string | undefined; default?: ValidValue<T, M> | undefined; description?: string | undefined; hint?: (T extends "boolean" ? undefined : string | undefined) | undefined; validate?: ((v: unknown) => v is ValidValue<T, M>) | undefined; validOptions?: (T extends "boolean" ? undefined : T extends "string" ? readonly string[] : T extends "number" ? readonly number[] : readonly string[] | readonly number[]) | undefined; } & MultiType<M> |
已修改的签名
| export | 之前 | 之后 |
|---|---|---|
jackspeak · ConfigSet | { [longOption: string]: ConfigOptionBase<ConfigType, boolean>; } | { [longOption: string]: ConfigOption<ConfigType, boolean, readonly number[] | readonly string[] | undefined>; } |
jackspeak · UsageField | TextRow | { type: "config"; name: string; value: ConfigOptionBase<ConfigType, boolean>; } | TextRow | { type: "config"; name: string; value: ConfigOption<ConfigType, boolean, readonly number[] | readonly string[] | undefined>; } |
jackspeak · ValidValue | [T, M] extends ["number", true] ? number[] : [T, M] extends ["string", true] ? string[] : [T, M] extends ["boolean", true] ? boolean[] : [T, M] extends ["number", false] ? number : [T, M] extends ["string", false] ? string : [T, M] extends ["boolean", false] ? boolean : [T, M] extends ["string", boolean] ? string | string[] : [T, M] extends ["boolean", boolean] ? boolean | boolean[] : [T, M] extends ["number", boolean] ? number | number[] : [T, M] extends [ConfigType, false] ? string | number | boolean : [T, M] extends [ConfigType, true] ? number[] | string[] | boolean[] : string | number | bo… | [T, M] extends ["number", true] ? number[] : [T, M] extends ["string", true] ? string[] : [T, M] extends ["boolean", true] ? boolean[] : [T, M] extends ["number", false] ? number : [T, M] extends ["string", false] ? string : [T, M] extends ["boolean", false] ? boolean : [T, M] extends ["string", boolean] ? string | string[] : [T, M] extends ["boolean", boolean] ? boolean | boolean[] : [T, M] extends ["number", boolean] ? number | number[] : [T, M] extends [ConfigType, false] ? ConfigValuePrimitive : [T, M] extends [ConfigType, true] ? ConfigValueArray : ConfigValue |
jackspeak · isConfigType | (t: string): t is ConfigType | (t: unknown): t is ConfigType |
jackspeak · ConfigMetaSet | { [longOption: string]: ConfigOptionMeta<T, M, (T extends "boolean" ? never : T extends "string" ? readonly string[] : T extends "number" ? readonly number[] : readonly string[] | readonly number[]) | undefined>; } | { [longOption: string]: ConfigOptionMeta<T, M, ConfigOption<T, M, ValidOptions<T> | undefined>>; } |
jackspeak · OptionsResults | { [k in keyof T]?: (T[k]["validOptions"] extends readonly string[] | readonly number[] ? T[k] extends ConfigOptionBase<"string" | "number", false> ? T[k]["validOptions"][number] : T[k] extends ConfigOptionBase<"string" | "number", true> ? T[k]["validOptions"][number][] : never : T[k] extends ConfigOptionBase<"string", false> ? string : T[k] extends ConfigOptionBase<"string", true> ? string[] : T[k] extends ConfigOptionBase<"number", false> ? number : T[k] extends ConfigOptionBase<"number", true> ? number[] : T[k] extends ConfigOptionBase<"boolean", false> ? boolean : T[k] extends ConfigOptionB… | { [K in keyof T]: (T[K]["validOptions"] extends ReadonlyArrays ? T[K] extends ConfigOption<"string" | "number", false, readonly number[] | readonly string[] | undefined> ? T[K]["validOptions"][number] : T[K] extends ConfigOption<"string" | "number", true, readonly number[] | readonly string[] | undefined> ? T[K]["validOptions"][number][] : never : T[K] extends ConfigOption<"string", false, readonly string[] | undefined> ? string : T[K] extends ConfigOption<"string", true, readonly string[] | undefined> ? string[] : T[K] extends ConfigOption<"number", false, readonly number[] | undefined> ? num… |
jackspeak · isConfigOption | <T extends ConfigType, M extends boolean>(o: any, type: T, multi: M): o is ConfigOptionBase<T, M> | <T extends ConfigType, M extends boolean>(o: unknown, type: T, multi: M): o is ConfigOption<T, M, ValidOptions<T> | undefined> |
jackspeak · ConfigOptionMeta | { default?: (ValidValue<T, M> & (O extends number[] | string[] ? M extends false ? O[number] : O[number][] : unknown)) | undefined; validOptions?: O | undefined; description?: string | undefined; validate?: ((v: unknown) => v is ValidValue<T, M>) | ((v: unknown) => boolean) | undefined; short?: string | undefined; type?: T | undefined; hint?: (T extends "boolean" ? never : string) | undefined; delim?: (M extends true ? string : never) | undefined; } & (M extends false ? { multiple?: false | undefined; } : M extends true ? { multiple: true; } : { multiple?: boolean | undefined; }) | Pick<Partial<O>, "type"> & Omit<O, "type"> |
jackspeak · ConfigSetFromMetaSet | { [longOption in keyof S]: ConfigOptionBase<T, M>; } | S & { [longOption in keyof S]: ConfigOption<T, M, ValidOptions<T> | undefined>; } |
已删除的类或接口成员
未发现。
已修改的类或接口成员
| member | 之前 | 之后 |
|---|---|---|
Jack.num | <F extends ConfigMetaSet<"number", false>>(fields: F): Jack<C & ConfigSetFromMetaSet<"number", false, F>> | <F extends ConfigMetaSet<"number", false>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"number", false, readonly number[] | undefined>; }> |
Jack.opt | <F extends ConfigMetaSet<"string", false>>(fields: F): Jack<C & ConfigSetFromMetaSet<"string", false, F>> | <F extends ConfigMetaSet<"string", false>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"string", false, readonly string[] | undefined>; }> |
Jack.flag | <F extends ConfigMetaSet<"boolean", false>>(fields: F): Jack<C & ConfigSetFromMetaSet<"boolean", false, F>> | <F extends ConfigMetaSet<"boolean", false>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"boolean", false, undefined>; }> |
Jack.toJSON | (): { [k: string]: { hint?: string | undefined; default?: string | number | boolean | number[] | string[] | boolean[] | undefined; validOptions?: readonly string[] | readonly number[] | undefined; validate?: ((v: unknown) => v is string | number | boolean | number[] | string[] | boolean[]) | undefin… | (): { [k: string]: { hint?: string | undefined; default?: ConfigValue | undefined; validOptions?: readonly number[] | readonly string[] | undefined; validate?: ((v: unknown) => boolean) | ((v: unknown) => v is ConfigValue) | undefined; description?: string | undefined; short?: string | undefined; de… |
Jack.numList | <F extends ConfigMetaSet<"number">>(fields: F): Jack<C & ConfigSetFromMetaSet<"number", true, F>> | <F extends ConfigMetaSet<"number", true>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"number", true, readonly number[] | undefined>; }> |
Jack.optList | <F extends ConfigMetaSet<"string">>(fields: F): Jack<C & ConfigSetFromMetaSet<"string", true, F>> | <F extends ConfigMetaSet<"string", true>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"string", true, readonly string[] | undefined>; }> |
Jack.flagList | <F extends ConfigMetaSet<"boolean">>(fields: F): Jack<C & ConfigSetFromMetaSet<"boolean", true, F>> | <F extends ConfigMetaSet<"boolean", true>>(fields: F): Jack<C & F & { [longOption in keyof F]: ConfigOption<"boolean", true, undefined>; }> |
Jack.setConfigValues | (values: OptionsResults<C>, source?: string | undefined): Jack<C> | (values: Partial<OptionsResults<C>>, source?: string | undefined): Jack<C> |
JackOptions.env | { [k: string]: string | undefined; } | undefined | Record<string, string | undefined> | undefined |
新增弃用
未发现。
要求变化(engines、peer 依赖)
| 之前 | 之后 | |
|---|---|---|
engines.node | — | 20 || >=22 |
新增导出 (10)
| import | export | kind |
|---|---|---|
jackspeak | ConfigValue | type |
jackspeak | ConfigOption | type |
jackspeak | ValidOptions | type |
jackspeak | ReadonlyArrays | type |
jackspeak | ParseArgsOption | type |
jackspeak | ConfigValueArray | type |
jackspeak | ParseArgsDefault | type |
jackspeak | ParseArgsOptions | type |
jackspeak | ConfigValuePrimitive | type |
jackspeak | isConfigOptionOfType | variable |
把这些数据交给你的 AI 智能体
Vigia 是免费的 MCP 服务器:你的编程智能体在写代码之前就能检查版本、不兼容变更和安全漏洞。无需注册,无需 API 密钥。
claude mcp add --transport http vigia https://vigia.coredls.cloud/mcp
添加到 Cursor添加到 VS Code★ 在 GitHub 上加星
任何其他 MCP 客户端
{ "mcpServers": { "vigia": { "url": "https://vigia.coredls.cloud/mcp" } } }常见问题
将 jackspeak 从 3 升级到 4 有哪些不兼容变更?
在 jackspeak 3.4.3 与 4.2.3 之间,Vigia 发现 2 个已删除的导出、9 个已修改的签名,以及 9 个已删除或修改的类或接口成员。
jackspeak 4 中弃用了哪些内容?
jackspeak 4.2.3 中有 0 个导出或成员新被标记为弃用。
供智能体使用
GET https://vigia.coredls.cloud/v1/packages/npm/jackspeak/upgrade?from=3.4.3&to=4.2.3