Javascript Typescript:索引类型在条件if语句中不起作用
我在理解有条件情况下的索引类型时遇到了一些问题。我在下面设置了一个函数,该函数将接受Javascript Typescript:索引类型在条件if语句中不起作用,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,我在理解有条件情况下的索引类型时遇到了一些问题。我在下面设置了一个函数,该函数将接受配置文件对象,并使用提供的键将提供的值应用于其设置。没问题!问题是如果我想为其中一个设置处理一个简单的用例,在这种情况下,我想对settingThree执行算术运算,它在settings界面中明确定义为一个数字。但是,编译器不喜欢它,并抱怨: 算术操作数必须是“any”、“number”、“bigint”或枚举类型。 下面是我的示例 interface Settings { settingOne: boo
配置文件
对象,并使用提供的键将提供的值应用于其设置
。没问题!问题是如果我想为其中一个设置处理一个简单的用例,在这种情况下,我想对settingThree
执行算术运算,它在settings
界面中明确定义为一个数字。但是,编译器不喜欢它,并抱怨:
算术操作数必须是“any”、“number”、“bigint”或枚举类型。
下面是我的示例
interface Settings {
settingOne: boolean;
settingTwo: string[];
settingThree: number;
}
interface Profile {
id: number;
settings: Settings;
}
function setSettings<SN extends keyof Settings>(
profile: Profile,
settingName: SN,
settingData: Settings[SN]
) {
if(profile.settings && profile.settings[settingName]) {
profile.settings[settingName] = settingData;
/**
* Error is thrown here, settingData++ is identified as the cause of this error
* An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type.
*/
if (settingName === "settingThree") settingData++;
}
}
这很好,我很乐意使用它,然而,我很好奇为什么这是必要的?
条件是否未明确推断出类型?在代码的这一点上,settingData
怎么可能不是number
类型
提前谢谢你
if (settingName === "settingThree") (settingData as number)++;