Figma插件里怎么获取当前选中图层的文本内容?

Des.丹丹 阅读 88

我在写一个Figma插件,想拿到用户当前选中的文本图层的内容,但总是报错说类型不对。我试了用figma.currentPage.selection拿到选中项,然后直接读.characters,结果控制台提示“Property ‘characters’ does not exist on type ‘SceneNode’”。

是不是得先判断节点类型?但我不知道具体该怎么写类型检查,求个能跑通的写法!

const selection = figma.currentPage.selection;
if (selection.length > 0) {
  const node = selection[0];
  // 这里怎么安全地取到文本内容?
  console.log(node.characters);
}
我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
程序员素玲
第一步,我们要理解为什么会出现这个错误。figma.currentPage.selection 返回的是一个 SceneNode 数组,而 SceneNode 是所有节点类型的基类,它并不直接包含 characters 属性。characters 属性只存在于 TextLayerNode 类型中。因此,我们需要先检查选中的节点是否是文本图层,然后再尝试获取其文本内容。

接下来,我们可以通过 instanceof 操作符来判断节点的具体类型。instanceof 可以用来检测对象是否是指定类型的实例。在这个例子中,我们要检测节点是否是 TextLayerNode

下面是修改后的代码,包含了详细的注释:

// 获取当前页面的选中项
const selection = figma.currentPage.selection;

// 检查是否有选中项
if (selection.length > 0) {
// 获取第一个选中的节点
const node = selection[0];

// 使用 instanceof 判断节点是否为 TextLayerNode
if (node instanceof figma.TextNode) {
// 如果是文本节点,则可以安全地访问 characters 属性
console.log(node.characters); // 输出文本内容
} else {
// 如果不是文本节点,则输出一条信息
console.log("选中的不是文本图层");
}
} else {
// 如果没有任何选中的节点,也输出一条信息
console.log("没有选中任何图层");
}


这段代码首先获取当前页面的选中项,然后检查是否有选中项。如果有,就获取第一个选中的节点,并使用 instanceof 判断这个节点是否是 TextNode。如果是,就可以安全地访问 characters 属性并打印文本内容;如果不是,就在控制台输出一条信息,告知用户选中的不是文本图层。这样就能避免之前的类型错误了。
点赞
2026-03-25 11:09
司徒广运
对,得先判断节点类型才行。Figma 里 selection 返回的是 SceneNode 数组,这货是个通用类型,只有具体到 TextNode 才有 characters 属性。

写法很简单,加个类型判断就完事了:

const selection = figma.currentPage.selection;
if (selection.length > 0) {
const node = selection[0];

// 关键就在这儿,得先判断类型
if (node.type === 'TEXT') {
console.log(node.characters);
} else {
console.log('选中的不是文本图层');
}
}


或者如果你想更严谨一点,可以这样:

const selection = figma.currentPage.selection;
const textNodes = selection.filter(node => node.type === 'TEXT');

textNodes.forEach(textNode => {
console.log(textNode.characters);
});


这样能拿到所有选中的文本图层内容。

TypeScript 的话 node.type === 'TEXT' 这个判断会自动帮类型收窄,之后就能正常访问 characters 了,不用强制类型转换。
点赞
2026-03-17 18:05