当我在strictBindCallApply:true
中添加tsconfig.json
并运行ng build
时,我得到以下信息:
src / app / hot / hot.component.ts(538,61)中的错误:错误TS2345:类型'IArguments'的参数不能分配给类型'[Core,HTMLTableCellElement,number,number,string |数字,任意,CellProperties]”。
类型'IArguments'缺少类型'[Core,HTMLTableCellElement,number,number,string |数字,任意,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中使用的语句相同。
我正在使用:
在没有strictBindCallApply
的情况下,构建工作正常。
答案 0 :(得分:1)
strictBindCallApply:true
对apply
调用启用严格类型检查,这就是导致错误的原因。 arguments
的类型不是打字稿希望在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);
如果您要进行类型检查,我认为第一种方法是更好的选择。