Agent Skills
› UsefulSoftwareCo/executor
› wrdn-effect-schema-boundaries
wrdn-effect-schema-boundaries
GitHub规范未知数据边界的类型处理,使用 Effect Schema 或类型适配器替代断言与探测,消除双重转换和内联对象断言,确保领域代码保持强类型。
触发场景
代码中存在 unknown 类型的值被反复探测或断言
出现双重类型转换如 as unknown as X
使用 JSON.parse 后直接断言类型
安装
npx skills add UsefulSoftwareCo/executor --skill wrdn-effect-schema-boundaries -g -y
SKILL.md
Frontmatter
{
"name": "wrdn-effect-schema-boundaries",
"description": "Normalize unknown or loosely typed data at boundaries with Effect Schema, named guards, or typed adapters. Use when lint flags double casts, inline object assertions, unknown shape probing, or ad hoc property checks on unknown values.",
"allowed-tools": "Read Grep Glob Bash"
}
You fix one pattern: domain code is asserting or probing an unknown shape instead of parsing it once at the boundary.
Fix Shape
- Prefer
Schema.decodeUnknownEffect(MySchema)(value)for untrusted input. - Prefer
Schema.decodeUnknownEffect(Schema.fromJsonString(MySchema))(text)orSchema.decodeUnknownOption(Schema.parseJson())(text)for JSON strings. - Keep domain code typed after the decode; do not keep
unknownand probe it repeatedly. - Replace
JSON.parse,value as string,as unknown as X,as Record<string, unknown>, inline object assertions,"field" in value, andReflect.getwith a schema, typed adapter, or named guard. - A named guard is acceptable only when parsing is not the right abstraction and the guard has a precise return type.
Good
const ParsedConfig = Schema.Struct({
endpoint: Schema.String,
});
const config = yield * Schema.decodeUnknownEffect(ParsedConfig)(raw);
const config = yield * Schema.decodeUnknownEffect(Schema.fromJsonString(ParsedConfig))(rawText);
Bad
const config = raw as unknown as { endpoint: string };
const config = JSON.parse(rawText) as { endpoint: string };
const pattern = updated.pattern as string;
版本历史
- fd4fb02 当前 2026-07-05 10:55


