Home > Enterprise >  TS7053: Element implicitly has an 'any' type
TS7053: Element implicitly has an 'any' type

Time:01-26

Sry for my stupid question, but i can`t search answer for my promlem. TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ width: number; height: number; title: string; }'

let menu:{width:number; height:number; title:string} = {
width: 200,
height: 300,
title: 'My menu',
 }
function multiplyNumeric(menu:{width:number; height: number; title: string}):void {

for (let k in menu){
    if (typeof menu[k] === "number"){
        menu[k] = Number(menu[k]) * 2;
    }
}
}
multiplyNumeric(menu);

CodePudding user response:

TypeScript doesn't know what k means in the context of the for loop inside the multiplyNumeric function.

Since the type of Menu is strictly defined, and you are determining the value of Menu at run-time, you will need to add an additional generic to prop type to Menu, like this:

type Menu = {
  width: number;
  height: number;
  title: string;
  [prop: string]: number | string;
};

CodePudding user response:

On your multiplyNumeric function the parameter 'menu' has invalid data type. You cannot set like that. From what i understand you want your menu parameter to be an object with three properties

{
  width:number; 
  height: number; 
  title: string
}

You need to define an interface to do the job.

inteface menuObj {
    width:number; 
    height: number; 
    title: string;
}

And then do something like this:

function multiplyNumeric(menu: menuObj)
  •  Tags:  
  • Related