typescript 可以取消Office警告“数组方法回调中只能使用箭头函数”吗?

z9smfwbn  于 7个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(69)

假设您正在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))

f3temu5u

f3temu5u1#

您链接到的文档是正确的:将这样的变量传递给数组回调是Office SDK中的编译器错误。这不是linter警告。解决方法是在回调中使用case求值逻辑:

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

字符串
至于“为什么”这是一个编译器错误,它与Office脚本在运行之前从同步代码转译成异步代码的方式有关。我会尝试让产品团队的人在这里评论更多细节,但像这样的TypeScript限制有效地增加了通过消除边缘情况来提高性能。
另外,值得注意的是,这个问题中的行查找逻辑不包括重复项。不知道这是否重要,但我注意到了这一点。

相关问题