主方案中的不同类型和创建会导致 TypeScript 问题
// 主数据模型方案 export const companySchema = Type.Object( { id: Type.Number(), count: Type.String() // 例如在 DB 中存储为字符串 }, { $id: 'Company', additionalProperties: false } )
// 创建新条目的方案 export const companyDataSchema = Type.Object( { text: Type.String(), count: Type.Number() // API 会将其视为数字 }, { $id: 'CompanyData', additionalProperties: false } ) export type CompanyData = Static
// 类型错误 - 字符串类型不可赋值为 PromiseOrLiteral<number | undefined> 类型
export const companyDataResolver = resolve<CompanyData, HookContext>({
count: (value, obj, context, status) => {
return value + ' People'
}
})
// 类似地,如果主方案和创建方案之间存在不同的类型,则在钩子中 context.result 将被类型为 any
create: [
async (context, next) => {
const result = context.result
// result 类型为 any
await next()
}
]
类型永远不应回退到 any,如果出现意外类型,则输出类型应为 never,以免意外破坏 TypeScript。
内容来源: feathersjs/feathers