修复 typescript 中的 strictBindCallApply 相关错误
Posted
技术标签:
【中文标题】修复 typescript 中的 strictBindCallApply 相关错误【英文标题】:fixing strictBindCallApply related error in typescript 【发布时间】:2019-08-21 09:49:50 【问题描述】:当我在tsconfig.json
中添加strictBindCallApply:true
并运行ng build
时,我得到以下信息:
src/app/hot/hot.component.ts(538,61) 中的错误:错误 TS2345:“IArguments”类型的参数不可分配给“[Core, htmlTableCellElement, number, number, string | number, any, CellProperties]'。 类型“IArguments”缺少类型“[Core, HTMLTableCellElement, number, number, string | number, any, CellProperties]': 0, 1, 2, 3, 还有 32 个。
相关代码部分如下:
const cellValidationTempVar = this.cellValidation;
this.cellValidation[i].renderer = function (instance, td, row, col, prop, value, cellProperties)
Handsontable.renderers.TextRenderer.apply(this, arguments); // HERE!
if (instance.getDataAtCell(row, col).length > cellValidationTempVar[col].length )
td.classList.add('htInvalid');
else
td.classList.remove('htInvalid');
Handsontable.renderers.TextRenderer.apply(this, arguments);
语句与documentation 中使用的语句相同。
我正在使用:
Angular 7.2 掌上电脑 7.0.0 打字稿 3.2.4没有strictBindCallApply
,构建工作正常。
【问题讨论】:
【参考方案1】:strictBindCallApply:true
启用对apply
调用的严格类型检查,这就是它导致错误的原因。 arguments
的类型不是 typescript 期望在 apply 调用中获得的类型。文档中的示例是一个 javascript 示例,其中没有类型检查,这就是它可以正常工作的原因。
您可以通过显式指定参数而不是使用arguments object 来防止错误。这是更新的代码:
const cellValidationTempVar = this.cellValidation;
this.cellValidation[i].renderer = function (instance, td, row, col, prop, value, cellProperties)
Handsontable.renderers.TextRenderer.apply(this, [instance, td, row, col, prop, value, cellProperties]); // HERE!
if (instance.getDataAtCell(row, col).length > cellValidationTempVar[col].length )
td.classList.add('htInvalid');
else
td.classList.remove('htInvalid');
这不是那么优雅,但它可以防止类型错误。
另一种选择是通过转换为 any
来指定忽略类型,因此它就像 javascript 代码一样。
Handsontable.default.renderers.TextRenderer.apply(this, arguments as any);
如果您想要类型检查,我认为第一种方法是更好的方法。
【讨论】:
以上是关于修复 typescript 中的 strictBindCallApply 相关错误的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 typeScript 中的“对象”类型上不存在“属性”拨号
如何修复'Typescript“正在进行类型检查......”花费太长时间'?
React+Typescript:修复 UseEffect Hook(回调+清理函数错误)