假设您正在Excel 365中编写Office脚本,并且希望使用以下常见模式:
const isUpperCase = (str: string) => str.toUpperCase() === str
const texts = workbook.getActiveWorksheet().getUsedRange(true).getTexts()
const rowsContainingUpperCase = texts.filter((row) => row.some(isUpperCase))
字符串
最后一行给出了一个警告:
const rowsContainingUpperCase = texts.filter((row) => row.some(isUpperCase))
// ^^^^^^^^^^^
// Only arrow functions may be used in array method callbacks. (Office Scripts Error)
型
这看起来像是一个可以忽略的linter错误,但是在尝试运行脚本时,它无法运行,你会得到这样的结果:
参见第3行,第62列:只有箭头函数可以用于数组方法回调。
微软在TypeScript restrictions in Office Scripts中记录了这一点:
当为Array方法提供回调参数时,您的脚本只能使用箭头函数。您不能向这些方法传递任何类型的标识符或“传统”函数。
它还将其称为“编译器错误”,但它没有解释为什么这是一个编译器错误,也没有明确说明没有办法抑制它。
有没有办法抑制这个错误?或者你总是要重构为row.some((x) => isUpperCase(x))
?
1条答案
按热度按时间f3temu5u1#
您链接到的文档是正确的:将这样的变量传递给数组回调是Office SDK中的编译器错误。这不是linter警告。解决方法是在回调中使用case求值逻辑:
字符串
至于“为什么”这是一个编译器错误,它与Office脚本在运行之前从同步代码转译成异步代码的方式有关。我会尝试让产品团队的人在这里评论更多细节,但像这样的TypeScript限制有效地增加了通过消除边缘情况来提高性能。
另外,值得注意的是,这个问题中的行查找逻辑不包括重复项。不知道这是否重要,但我注意到了这一点。