typescript TS7053:元素隐式具有“any”类型

4ktjp1zp  于 2023-03-31  发布在  TypeScript
关注(0)|答案(3)|浏览(175)

对不起,我的愚蠢的问题,但我不能搜索答案为我的promlm。* TS 7053:元素隐式具有“any”类型,因为类型“string”的表达式不能用于索引类型“{ width:数量;高度:编号;标题: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);
x8diyxa7

x8diyxa71#

TypeScript不知道kmultiplyNumeric函数内部的for循环的上下文中意味着什么。
由于Menu的类型是严格定义的,并且您在运行时确定Menu的值,因此需要添加一个额外的泛型来将类型传递给Menu,如下所示:

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

nhhxz33t2#

在你的multiplyNumeric函数中,参数'menu'的数据类型无效。你不能这样设置。据我所知,你希望你的menu参数是一个有三个属性的对象

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

您需要定义一个接口来完成这项工作。

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

然后做类似这样的事情:

function multiplyNumeric(menu: menuObj)
twh00eeo

twh00eeo3#

interface Menu extends Record<string, string | number> {
   width: number,
   height: number,
   title: string,
}

相关问题