You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress Gutenberg中使用TypeScript useSelect钩子获取core/editor的类型错误问题

WordPress Gutenberg TypeScript开发:useSelect调用core/editor类型错误解决

问题场景

在WordPress Gutenberg编辑器开发中使用TypeScript,调用useSelect钩子获取core/editor模块的属性时出现类型错误。示例代码:

const featured = useSelect(
  (select) =>
    select('core/editor').getEditedPostAttribute('meta')[
      '_projects_featured'
    ],
  []
);

错误提示

Property 'getEditedPostAttribute' does not exist on type 'never'.

临时(不推荐)方案

可通过将core/editor实例断言为any类型绕过错误,但这完全违背TypeScript类型检查的初衷:

const editor: any = useSelect((select) => select('core/editor'));
const postAttribute = editor.getEditedPostAttribute();

已安装的类型依赖

package.json中相关依赖片段:

"dependencies": {
  "@types/wordpress__components": "^19.10.5",
  "@types/wordpress__core-data": "^2.4.5",
  "@types/wordpress__data": "^6.0.1",
  "@types/wordpress__edit-post": "^4.0.1",
  "@types/wordpress__editor": "^11.0.0",
  "@types/wordpress__element": "^2.14.1",
  "@types/wordpress__plugins": "^3.0.0",
  "@wordpress/data": "^8.0.0",
  "@wordpress/edit-post": "^7.0.0",
  "@wordpress/plugins": "^5.0.0"
}

解决方案

类型断言法

从@types/wordpress__editor导入EditorStore类型,将select('core/editor')断言为该类型,即可获得完整类型提示:

import { useSelect } from '@wordpress/data';
import type { EditorStore } from '@types/wordpress__editor';

const featured = useSelect(
  (select) => {
    const editorStore = select('core/editor') as EditorStore;
    return editorStore.getEditedPostAttribute('meta')['_projects_featured'];
  },
  []
);

泛型指定返回值类型

如果需要明确返回值类型,可给useSelect添加泛型参数强化类型约束:

import { useSelect } from '@wordpress/data';
import type { EditorStore } from '@types/wordpress__editor';

// 假设_projects_featured为布尔类型
const featured = useSelect<boolean | undefined>(
  (select) => {
    const editorStore = select('core/editor') as EditorStore;
    return editorStore.getEditedPostAttribute('meta')['_projects_featured'];
  },
  []
);

版本兼容性检查

确保@types/wordpress__editor与@wordpress/editor版本匹配,类型包版本滞后可能导致类型定义缺失。可尝试更新类型依赖到最新兼容版本:

npm update @types/wordpress__editor --save-dev

TypeScript开发Gutenberg的可行性

完全可行。尽管官方尚未推出专门的TypeScript文档,但社区维护的@types/wordpress__*系列类型包已覆盖绝大多数核心Gutenberg模块,类型定义较为完善。目前已有大量生产级插件和自定义区块采用TypeScript开发,WordPress官方也在逐步推进Gutenberg核心代码的TypeScript迁移,未来支持会更加完善。

内容的提问来源于stack exchange,提问作者user3331344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:45:37