能否为Strapi v4生命周期钩子实现类型安全?
Strapi v4 生命周期事件类型定义方案
可以直接从@strapi/strapi的内部模块获取生命周期事件的类型定义,Strapi v4 内置了完整的类型支持,无需额外安装依赖。
具体实现方式
TypeScript 项目
将生命周期文件改为.ts后缀,导入EntityService命名空间下的对应事件类型:
// foo/lifecycle.ts import type { EntityService } from '@strapi/strapi'; export default { // 通用类型定义 afterCreate: (event: EntityService.AfterCreateEvent) => { // event.result、event.params、event.data 均会有类型提示 }, // 针对特定内容类型的精确类型定义 afterUpdate: (event: EntityService.AfterUpdateEvent<typeof strapi.contentTypes['api::foo.foo']>) => { // event.result 会自动匹配 api::foo.foo 模型的字段类型 }, };
JavaScript 项目
如果使用 JavaScript,可以通过 JSDoc 引入类型,实现类型提示:
// foo/lifecycle.js /** * @param {import('@strapi/strapi').EntityService.AfterCreateEvent<typeof strapi.contentTypes['api::foo.foo']>} event */ export default { afterCreate: (event) => { // event.result 会获得对应模型的类型提示 }, };
可用的生命周期事件类型
EntityService命名空间下包含了所有生命周期钩子对应的类型,常见的有:
BeforeCreateEventAfterCreateEventBeforeUpdateEventAfterUpdateEventBeforeDeleteEventAfterDeleteEventBeforeFindManyEventAfterFindManyEvent
每个事件类型都预定义了钩子函数参数的结构,包括result、params、data等属性的具体类型。
内容的提问来源于stack exchange,提问作者alextrastero
相关产品推荐
相关产品推荐

