/ / Build: l'élément a implicitement un type 'any' car l'expression d'index n'est pas de type 'number' - typescript, typescript1.8

Build: l'élément a implicitement un type 'any' car l'expression d'index n'est pas de type 'number' - typescript, typescript1.8

Nous transpilons notre code TypeScript 1.8 obligeant le développeur du logiciel à définir les types.

Voici les messages d'erreur:

  • Description: Build: L'élément a implicitement un type "any" car l'expression d'index n'est pas de type "number".
  • Projet myProject
  • Fichier: C: devScriptsmachines.ts
  • Lignes: 77, 78, 80, 81, 96, 110, 111, 220
  • Source: Construire

QUESTION

Comment définir les types de ces variables?

  • _matrixQuantityProduct
  • _matrixQuantityLotSizeProduct
  • matrixQuantityProduct2
  • matrixQuantityLotSizeProduct2

Code source

    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]

Réponses:

15 pour la réponse № 1

Il semble que vous ayez des problèmes logiques dans votre code. En admettant que code property est de type string, les lignes suivantes ne jouent pas bien ensemble:

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

Disons this._machines[j].code évalue à "123".

Vous définissez donc une variable de type array et essayez d'accéder à son élément par la clé de chaîne "123". Dans ce cas, vous obtiendrez la valeur de la propriété 123 sur matrixQuantityProduct2 objet. Ce n'est probablement pas là - c'est un tableau après tout?

Vous aimeriez probablement utiliser matrixQuantityProduct2 comme dictionnaire. Dans ce cas, vous pouvez l'avoir comme ceci:

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

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

Notez l'initialisation avec {} au lieu de [].

En remarque. Vous pouvez désactiver ces erreurs en définissant "noImplicitAny": false dans votre tsconfig.json compilerOptions section. Mais je ne recommanderais pas de faire cela.

J'espère que cela t'aides.


0 pour la réponse № 2

À propos de la ligne 96, "nodeValue" semble renvoyer une chaîne de type, essayez donc d'utiliser parseInt () pour le changer en nombre.

matrixQuantityProduct[parseInt(_machinesRefElements[k].nodeValue)][parseInt(_machinesRefElements[k + 1].nodeValue)] += _quantityProduct;

Pour les autres, je n'obtiens aucune erreur en essayant simplement votre code, mais il se peut que vous créez Array<any> et en essayant de l'enregistrer dans Array<Array<number>>