1.9 KiB
1.9 KiB
管理端开发工程师 经验记录 - 2026-03-12
ContentPage TypeScript 严格类型修复
问题
soul-admin 构建时 ContentPage.tsx 出现多处 TS2322 类型错误:
- 可选字段赋给必填字段:
LinkTagItem的appId、pagePath为可选(string | undefined),setNewLinkTag期望string - 接口缺字段:
SectionListItem无isPinned,但 ranking API 返回该字段 - API 映射类型:
loadPersons中p.token、p.label、p.ckbApiKey可能为undefined,映射后PersonItem.id等需为string - 可选参数传 setState:
setEditingPersonKey(p.personId)中personId可选,setter 期望string | null
解决方案
| 场景 | 写法 |
|---|---|
| 可选字段 → 必填 string | t.appId ?? ''、t.pagePath ?? '' |
| 接口补字段 | 在 SectionListItem 添加 isPinned?: boolean |
| API 映射兜底 | id: p.token ?? p.personId ?? '',label: p.label ?? '',ckbApiKey: p.ckbApiKey ?? '' |
| 可选 → setState(string|null) | setEditingPersonKey(p.personId ?? null) |
规则提炼
- 从可选类型(
T | undefined)赋给必填类型(T)时,用?? defaultValue兜底 - 接口类型需与 API 返回字段对齐,缺字段时补
field?: Type useState<string | null>的 setter 传参时,undefined需显式转为null
关联小程序与 @ 人物:密钥/token 设计
关联小程序
- 添加时生成 32 位 key,链接标签选择小程序时存 key(非 appId)
- 列表展示:名称、密钥、AppID、路径;编辑/删除用 key
- 链接标签下拉:选项显示 name + key,选中后
appId字段存 key
@ 人物
- 添加时生成 32 位 token,PersonItem.id = token(RichEditor 插入用)
- 列表展示 token;编辑/删除用 personId(API 仍用 personId)
- 文章 @ 时 data-id 存 token