ワンクリックで
type-project-organization
规范类型项目(apps/type)的代码组织方式、导出语法和文件结构。用于解决类型导出冲突、创建统一导出入口、处理重复导出等问题。适用于类型项目开发、类型错误修复、代码规范实施场景。在处理类型项目的代码写法时,请使用本技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
规范类型项目(apps/type)的代码组织方式、导出语法和文件结构。用于解决类型导出冲突、创建统一导出入口、处理重复导出等问题。适用于类型项目开发、类型错误修复、代码规范实施场景。在处理类型项目的代码写法时,请使用本技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
使用 Nitro v3 框架和 H3 编写服务端 API 的技能。适用于后端接口开发、Mock 数据迁移到 Neon 数据库、以及编写符合 Drizzle ORM 标准的查询逻辑。当需要开发新的 CRUD 接口或修复现有后端逻辑时使用此技能。
当你修改数据库结构或种子生成脚本时,请务必阅读并遵循此指南,以防止性能问题、数据一致性崩溃和部署失败。新 Schema 应在 apps/type 中创建。
数据库 Schema 变更时的全项目同步检查清单。当修改 apps/type 中 schema.ts 的表字段、新增数据库表、或删除表时,使用此技能确保类型项目、数据库迁移、后端接口、前端页面、种子数据和技能文档全部同步更新,避免遗漏。
当用户要求在 bug 已经定位并修复后,记录排错经验、事故结论、AI 记忆更新、复盘摘要或本地 MCP 记忆时使用。这个技能只负责沉淀"发生了什么、为什么会发生、如何修好、以后要记住什么",不要把它用于实际修复 bug。
新建公共组件规范专家 - 指导在 src/components/common 目录下创建符合项目规范的公共组件,包括文件结构、TypeScript 类型、Vue 组件、文档和测试页面。 触发条件(满足任意一项即触发): - 任务包含"新建组件"、"公共组件"、"common 组件"、"创建组件"等关键词 - 需要在 src/components/common 目录下创建新组件 - 需要创建可复用的业务组件(如表单分区标题、操作按钮组、信息展示卡片) - 需要编写组件的 TypeScript 类型定义 - 需要编写组件使用文档(index.md) - 需要创建组件测试页面(src/pages/test-use/) - 用户提及"组件规范"、"组件文档"、"组件测试"等关键词 必须协同的技能: - beautiful-component-design(组件美化时)- 图标、响应式设计、表单分区标题 - component-migration(从旧组件迁移时)- ColorUI → wot-design-uni - use-wd-form(组件内包含表单时)- 表单结构、wd-picker、校验规则 禁止事项: - 禁止在 components 目录外创建公共组件 - 禁止不编写组件文档(index.md) - 禁止不提供使用示例和测试页面 - 禁止组件命名不规范(必须使用短横线命名法) - 禁止不定义 TypeScript 类型(types.ts) - 禁止在组件文件顶部不添加说明注释 - 禁止不使用 withDefaults 设置 props 默认值 覆盖场景:所有需要跨页面复用的业务组件,包括表单分区标题(FormSectionTitle)、操作按钮组(ActivityActions)、信息展示卡片(ActivityInfo)、加载状态组件(ZPagingLoading)等。
接口错误提示能力 - 提供统一的接口错误提示标准和实施方案,基于 wot-design-uni 和 Alova useRequest 回调模式。 触发条件(满足任意一项即触发): - 编写任何 API 接口调用代码(使用 useRequest) - 处理 useRequest 的 onError 回调 - 实现全局错误拦截逻辑 - 用户提及"接口错误提示"、"错误处理"、"Toast 提示"等关键词 - 从 Vue2 迁移 API 调用(需要添加错误处理) - 实现表单提交、列表加载等涉及 API 的功能 必须协同的技能: - api-migration(API 接口迁移时) - z-paging-integration(分页列表时) - use-wd-form(表单提交时) 禁止项: - 禁止使用 try/catch 包装 send() 函数 - 禁止在组件内手动显示错误 Toast(全局拦截器已处理) - 禁止使用 immediate: true(必须手动触发请求) - 禁止在 onError 中重复显示错误提示 覆盖场景:几乎所有 API 调用都需要此技能,包括列表查询、详情查询、表单提交、数据删除、状态更新等。
| name | type-project-organization |
| description | 规范类型项目(apps/type)的代码组织方式、导出语法和文件结构。用于解决类型导出冲突、创建统一导出入口、处理重复导出等问题。适用于类型项目开发、类型错误修复、代码规范实施场景。在处理类型项目的代码写法时,请使用本技能。 |
| allowed-tools | Read, Edit, Grep, Glob, Bash, Write |
此技能提供类型项目(apps/type)的完整代码组织规范,包括导出语法、文件结构、命名约定和最佳实践。确保类型系统的一致性、可维护性和可扩展性。
必须使用全量导出,不区分类型和变量。
错误写法:
export type * from "./expense-manage";
正确写法:
export * from "./expense-manage";
不允许逐个罗列导出项目。
错误写法:
export type { PatrolTaskFormVO, PatrolTaskFormProps, TaskListItem, TaskQueryParams } from "./task";
正确写法:
export * from "./task";
根据业务路径,在每一层级编写 index.ts 作为统一导出入口。
// apps/type/src/index.ts
// 导出通用类型
export * from "./common";
// 导出业务类型
export * from "./business";
// 导出常量
export * from "./constant";
// apps/type/src/business/index.ts
/**
* @file 业务类型统一导出
* @description 导出所有业务模块的类型定义
*/
export * from "./dev-team";
export * from "./operation-team";
export * from "./property-manage";
export * from "./setting-manage";
// apps/type/src/business/property-manage/index.ts
// 社区管理模块
export * from "./community-manage";
// 房产管理模块
export * from "./house-property-manage";
// 合同管理模块
export * from "./contract-manage";
// 费用管理模块
export * from "./expense-manage";
// 停车管理模块
export * from "./parking-manage";
// 巡检管理模块
export * from "./patrol-manage";
// 报修管理模块
export * from "./repairs-manage";
// 报表管理模块
export * from "./report-manage";
// apps/type/src/business/property-manage/patrol-manage/index.ts
export * from "./detail";
export * from "./item";
export * from "./path";
export * from "./plan";
export * from "./point";
export * from "./task";
apps/type 的所有 .ts 源文件中,MUST 使用相对路径导入,MUST NOT 使用 @/ 路径别名。
原因:apps/type 作为 workspace 依赖被 apps/admin 等项目消费。当消费端(如 admin)通过 Vite 构建时,构建工具使用的是消费端项目自身的 @/ 路径别名配置(指向 apps/admin/src/),而非 type 项目的配置(指向 apps/type/src/)。这导致 @/common 被错误解析为 apps/admin/src/common,引发构建失败。
apps/type/tsconfig.json中的@/* → src/*别名仅在独立tsc --noEmit类型检查时生效,不影响 Vite 构建。
错误写法:
import { primaryId, timestamps } from "@/common";
import { someHelper } from "@/business/utils";
正确写法:
/** 从 src/business/<domain>/schema.ts 导入 common(向上两级) */
import { primaryId, timestamps } from "../../common";
/** 从 src/business/<domain>/<module>/schema.ts 导入 common(向上三级) */
import { primaryId, timestamps } from "../../../common";
相对路径深度参考表:
| 文件位置 | 导入 common 的相对路径 |
|---|---|
src/business/<domain>/schema.ts | ../../common |
src/business/<domain>/<mod>/schema.ts | ../../../common |
src/business/utils.ts | ../common |
遇到导出冲突时,统一整理到公共文件,避免分散导出。
对于公共的下拉选项变量,统一放在:
apps/type/src/common/business-options.ts业务选项标准:
contractTypeOptions,禁止使用 合同类型Options。示例:
// apps/type/src/common/business-options.ts
/**
* @description 审核状态选项
* Audit status options
*/
export const auditStatusOptions: OptionsType = [
{ label: "待审核", value: "待审核" },
{ label: "已通过", value: "已通过" },
{ label: "已拒绝", value: "已拒绝" },
];
对于公共的通用业务类型,统一放在:
apps/type/src/common/business-types.ts关于 package.json 和 tsconfig.json 的配置标准,请参考:
当创建新的业务类型时:
.ts 文件index.ts 中添加导出index.ts 也包含此导出当遇到类似错误时:
模块 "./community-manage" 已导出一个名为"auditStatusOptions"的成员
解决步骤:
apps/type/src/common/business-options.ts当重构现有类型结构时:
export * from "./module" 进行批量导出../../common),确保跨项目构建正确export type * from "./module"@/ 路径别名导入(会导致被其他项目消费时路径解析失败)pnpm -F @01s-11comm/type typecheck
# 查看导出结构
find apps/type/src -name "index.ts" -exec echo "=== {} ===" \; -exec cat {} \;
# 检查重复导出(需要手动审查)
pnpm -F @01s-11comm/type typecheck 2>&1 | grep -i "歧义\|conflict\|duplicate"
症状: TypeScript 报错提示成员重复导出
解决方案:
症状: 导入类型时提示找不到
解决方案:
症状: 部分类型无法访问
解决方案:
症状: apps/admin 构建时报错 Could not load .../apps/admin/src/common (imported by ../type/src/business/.../schema.ts): ENOENT
原因: type 项目的源文件中使用了 @/common 路径别名。当 admin 项目通过 Vite 构建并解析 type 包源码时,@/ 被解析为 admin 项目的 src/ 目录,导致找不到文件。
解决方案:
@/ 路径别名替换为相对路径import { primaryId } from "@/common" 改为 import { primaryId } from "../../common"../ 层级数pnpm -F @01s-11comm/type typecheck 和 pnpm build:admin 验证修复apps/type/src/apps/admin/src/router/rank/rank-route-keys.tsfix-type-error 子代理