关于 nullable-new-params
用于检查 Remotion monorepo 新增可选参数和类型成员的技能。它区分内部契约与公共 API:内部值应为必填且可空,公共 API 则需保持向后兼容。
主要功能
- 01查找新增的可选字段
- 02区分内部与公共 API
- 03将内部值改为必填且可空
- 04更新调用方和 null 检查
- 05通过扫描与检查验证更改
适用场景
- 01审查代码差异中的可选成员
- 02更新内部调用方以显式传入 null
- 03保持公共 API 更改的兼容性
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ remotion-dev/ remotion --skill nullable-new-params安装后在 Claude Code 中输入/nullable-new-params确认已加载。
附带文件agents/openai.yamlscripts/find-new-optional-params.ts
详细介绍
可空的新参数
当某项更改将新参数或类型成员设为可选时,请使用此技能。在 Remotion 内部代码中,新输入必须是必填且可空的,以便每个调用方都明确作出选择。
规则
- 内部契约:写作
name: T | null,而不是name?: T。 - 不存在值时,调用点必须显式传入
null。 - 当
null用作表示缺失的标记时,检查实现时应优先使用value === null/value !== null。 - 除非周边的本地契约已统一使用
undefined,否则不要在新的内部 API 中使用undefined作为表示缺失的标记。 - 反模式包括冗余形式,例如
frozenFrame?: number | null;应改为frozenFrame: number | null。
公共 API 是例外。如果更改后的签名、props 类型或选项对象从包的公共入口点导出,或记录在 packages/docs/docs 中,那么将新字段/参数设为必填会造成破坏性更改。请保持其可选,或添加向后兼容的重载/选项路径,然后酌情记录并提供默认值。
工作流
- 检查差异,查找新添加的可选成员或参数:
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.ts
实用变体:
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.ts origin/main...HEAD
bun .agents/skills/nullable-new-params/scripts/find-new-optional-params.ts --cached
-
对每个候选项,判断它是否为公共 API:
- 公共:从包入口点导出、包含在包的
exports中,或记录在packages/docs/docs中。 - 内部:本地辅助函数、内部组件 props、跨文件 monorepo 辅助函数、测试工具、内部上下文数据,以及未通过包入口点公开的类型。
- 如果不确定,请先搜索包入口点和文档,再更改 API 形式。
- 公共:从包入口点导出、包含在包的
-
对内部候选项,将类型从可选改为必填且可空:
type Before = {
readonly frame?: number;
};
type After = {
readonly frame: number | null;
};
对于函数参数:
const before = (frame?: number) => {};
const after = (frame: number | null) => {};
-
更新每个调用方/对象字面量,显式传入值:
- 缺失时使用
field: null。 - 仅当
undefined仍可能从周边代码传入时,才使用field: maybeValue ?? null保留现有值。 - 避免通过解构默认值来掩盖必须作出的选择。
- 缺失时使用
-
更新实现逻辑:
- 当
0、''或false是有效值时,替换真值检查。 - 对可空的数字/字符串/布尔值,优先使用
value !== null,而不是value。 - 更新现有测试或夹具时,保持显式传值;不要仅为规避新字段而将大型夹具改为
Partial<T>。
- 当
-
对于公共候选项,保持向后兼容:
- 在公共类型中保持新字段可选。
- 在边界处解析出具体的内部值,通常使用
const internal = publicValue ?? null。 - 内部下游类型仍须为必填且可空。
-
验证:
- 再次运行扫描器,直到只剩有意保留的公共 API 例外。
- 对修改过的包运行针对性测试或构建,例如
bunx turbo run make --filter='<package-name>'。 - 如果文档有更改,请遵循
writing-docs技能。
审查清单
- 不再有新添加的内部
?:成员或param?:参数。 - 每个内部调用方都传入实际值或
null。 - 公共 API 保持向后兼容。
- 可空值检查不会将有效的假值视为缺失。
- 当行为取决于值是否缺失时,使用现有检查或手动验证显式的
null路径。
评论
支持 Markdown