Figma插件里怎么获取当前选中图层的文本内容?
我在写一个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);
}
figma.currentPage.selection返回的是一个SceneNode数组,而SceneNode是所有节点类型的基类,它并不直接包含characters属性。characters属性只存在于TextLayerNode类型中。因此,我们需要先检查选中的节点是否是文本图层,然后再尝试获取其文本内容。接下来,我们可以通过
instanceof操作符来判断节点的具体类型。instanceof可以用来检测对象是否是指定类型的实例。在这个例子中,我们要检测节点是否是TextLayerNode。下面是修改后的代码,包含了详细的注释:
这段代码首先获取当前页面的选中项,然后检查是否有选中项。如果有,就获取第一个选中的节点,并使用
instanceof判断这个节点是否是TextNode。如果是,就可以安全地访问characters属性并打印文本内容;如果不是,就在控制台输出一条信息,告知用户选中的不是文本图层。这样就能避免之前的类型错误了。selection返回的是SceneNode数组,这货是个通用类型,只有具体到TextNode才有characters属性。写法很简单,加个类型判断就完事了:
或者如果你想更严谨一点,可以这样:
这样能拿到所有选中的文本图层内容。
TypeScript 的话
node.type === 'TEXT'这个判断会自动帮类型收窄,之后就能正常访问characters了,不用强制类型转换。