为什么‘key in object’不足以安抚TS?

问题描述 投票:0回答:1
type LanguageKey =
    | 'c++'
    | 'python'
    | 'javascript'
    | 'typescript';

class Test {
    languages: Partial<Record<LanguageKey, string>> = {};
    
    needsString(str: string): void { console.log(str);}

    useLangKey(langKey: LanguageKey): void {
        if (langKey in this.languages) {
            const language = this.languages[langKey];
            this.needsString(language); // <-- "'string | undefined' is not assignable to 'string'" ??
        }
    }
}

TS 在标记行上抱怨“‘字符串 | 未定义’类型的参数不能分配给‘字符串’类型的参数。”。 测试

langKey in this.languages
还不够吗?

TS游乐场链接

typescript
1个回答
0
投票

🤔

如何保证该记录存在?未定义不在 LanguageKey 中,我认为这就是它所抱怨的。

您可以通过添加空支票来解决此问题

...
const language = this.languages[langKey];
if(!language) throw Error();
this.needsString(language);
...
© www.soinside.com 2019 - 2024. All rights reserved.