Office 脚本“只能在数组方法回调中使用箭头函数”警告可以被抑制吗?

问题描述 投票:0回答:1

假设您正在 Excel 365 中编写 Office 脚本,并且想要使用以下常见模式:

const isUpperCase = (str: string) => str.toUpperCase() === str
const texts = workbook.getActiveWorksheet().getUsedRange(true).getTexts()
const rowsContainingUpperCase = texts.find((row) => row.some(isUpperCase))

最后一行给出警告:

const rowsContainingUpperCase = texts.find((row) => row.some(isUpperCase))
//                                                           ^^^^^^^^^^^
// Only arrow functions may be used in array method callbacks. (Office Scripts Error)

这看起来像是一个可以忽略的 linter 错误,但是在尝试运行脚本时,它无法运行,您会得到以下结果:

参见第 3 行,第 62 列:在数组方法回调中只能使用箭头函数。

Microsoft 在 Office 脚本中的 TypeScript 限制中记录了这一点:

您的脚本在为数组方法提供回调参数时只能使用箭头函数。您不能将任何类型的标识符或“传统”函数传递给这些方法。

它也将其称为“编译器错误”,但它没有解释为什么这是一个编译器错误,也没有明确指出没有办法抑制它。

有办法抑制错误吗?或者你总是需要重构

row.some((x) => isUpperCase(x))

typescript office365 office-scripts
1个回答
0
投票

您链接到的文档是正确的:将这样的变量传递给数组回调是 Office 脚本中的编译器错误。这不是一个短绒警告。解决方法是在回调中包含案例评估逻辑:

const texts = workbook.getActiveWorksheet().getUsedRange(true).getTexts();
const rowsContainingUpperCase = texts.find((row) => row.some((str: string) => str.toUpperCase() === str));

至于“为什么”这是一个编译器错误,它与 Office 脚本在运行之前从同步代码转换为异步代码的方式有关。我会尝试让产品团队的人员在这里提供更多详细信息,但是像这样的 TypeScript 限制可以有效地添加,以通过消除边缘情况来提高性能。

此外,就其价值而言,此问题中的行查找逻辑不会包含重复项。不确定这是否重要,但这是我注意到的。

© www.soinside.com 2019 - 2024. All rights reserved.