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)++;