gpt4 book ai didi

typescript - 构建 : element implicitly has an 'any' type because index expression is not of type 'number'

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:56 27 4
gpt4 key购买 nike

我们正在转换我们的 TypeScript 1.8 代码,迫使软件开发人员设置类型。

错误信息如下:

  • 描述:构建:元素隐式具有“任意”类型,因为索引表达式不是“数字”类型。
  • 项目我的项目
  • 文件:C:\dev\Scripts\machines.ts
  • 第 77、78、80、81、96、110、111、220 行
  • 来源:构建

问题

我们应该如何定义这些变量的类型?

  • _matrixQuantityProduct
  • _matrixQuantityLotSizeProduct
  • 矩阵数量产品2
  • matrixQuantityLotSizeProduct2

源代码

    private _machines: Machine[];
private _matrixQuantityProduct: Array<Array<number>>;
private _matrixQuantityLotSizeProduct: Array<Array<number>>;
private buildMatrixQuantity() {
let matrixQuantityProduct : Array<Array<number>> = new Array();
let matrixQuantityLotSizeProduct: Array<Array<number>> = new Array();

// on cree le array 2D et les clés dynamiques
for (let i = 0; i < this._machines.length; i++) {
let matrixQuantityProduct2 : Array<any> = [];
let matrixQuantityLotSizeProduct2: Array<any> = [];
for (let j = 0; j < this._machines.length; j++) {
matrixQuantityProduct2[this._machines[j].code] = 0; [line 77]
matrixQuantityLotSizeProduct2[this._machines[j].code] = 0; [line 78]
}
matrixQuantityProduct[this._machines[i].code] = matrixQuantityProduct2; [line 80]
matrixQuantityLotSizeProduct[this._machines[i].code] = matrixQuantityLotSizeProduct2; [line 80]
}

this.listMatrixLog(matrixQuantityProduct, matrixQuantityLotSizeProduct);

let _productCodeElements: Element[] = this._productModel.getProducts();
for (let i = 0; i < _productCodeElements.length; i++) {
let _quantityProduct: number = this._productModel.getQuantityProduct(_productCodeElements[i].nodeValue);
let _processCodeElements: Element[] = this._productModel.getProcessProduct(_productCodeElements[i].nodeValue);
for (let j = 0; j < _processCodeElements.length; j++) {

let _lotSizeOperation: Element[] = this._productModel.getLotSizeOperation(_productCodeElements[i].nodeValue, _processCodeElements[j].nodeValue);
let _machinesRefElements: Element[] = this._productModel.getResourceMachineProcess(_processCodeElements[j].nodeValue);
for (let k = 0; k < _machinesRefElements.length - 1; k++) {

matrixQuantityProduct[_machinesRefElements[k].nodeValue][_machinesRefElements[k + 1].nodeValue] += _quantityProduct; [line 96]
//matrixQuantityLotSizeProduct[][] += (_quantityProduct /parseInt(_lotSizeOperation[k].nodeValue)) ;

}
}
}
this.listMatrixLog(matrixQuantityProduct, matrixQuantityLotSizeProduct);

this._matrixQuantityProduct = matrixQuantityProduct;
}

private listMatrixLog(matrixQuantityProduct: Array<Array<number>>, matrixQuantityLotSizeProduct: Array<Array<number>>) {
for (let i = 0; i < this._machines.length; i++) {
for (let j = 0; j < this._machines.length; j++) {
this._log.trace("Machine/listMatrix - Quantity Matrixf : " + matrixQuantityProduct[this._machines[i].code][this._machines[j].code]); [line 110]
this._log.trace("matrice quantityLotSize indice i = " + this._machines[i].code + " indice j = " + this._machines[j].code + " ,contient: " + matrixQuantityLotSizeProduct[this._machines[i].code][this._machines[j].code]); [line 111]
}
}
}


let cylinder = BABYLON.Mesh.CreateCylinder("cylinder", distance, this._matrixQuantityProduct[machineA][machineB] / 50, this._matrixQuantityProduct[machineA][machineB] / 50, 36, 1, this._scene, true); [line 220]

最佳答案

看起来您的代码中存在一些逻辑问题。假设 code 属性是字符串类型,下面几行不能很好地组合在一起:

let matrixQuantityProduct2: Array<any> = [];
matrixQuantityProduct2[this._machines[j].code] = 0;

假设 this._machines[j].code 的计算结果为“123”。

因此,您定义了数组类型的变量,并尝试通过字符串键“123”访问其元素。在这种情况下,您将获得 matrixQuantityProduct2 对象的属性 123 的值。那可能不存在 - 毕竟它是一个数组?

您很可能希望将 matrixQuantityProduct2 用作字典。在这种情况下,您可以像这样:

interface INameToValueMap
{
[key: string]: any;
}

let matrixQuantityProduct3: INameToValueMap = {};
matrixQuantityProduct3["123"] = 0;

请注意使用 {} 而不是 [] 进行初始化。

作为旁注。您可以通过在 tsconfig.json compilerOptions 部分中设置 "noImplicitAny": false 来禁用此类错误。但我不建议这样做。

希望这对您有所帮助。

关于typescript - 构建 : element implicitly has an 'any' type because index expression is not of type 'number' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36398492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com