Typescript 将Array.find与自定义类型一起使用时出现类型错误
我有一个包含支持的语言列表的对象。我想发现用户的浏览器包含以下语言之一:Typescript 将Array.find与自定义类型一起使用时出现类型错误,typescript,Typescript,我有一个包含支持的语言列表的对象。我想发现用户的浏览器包含以下语言之一: const userLanguage=browserLanguages.find(language=>!!支持的[language]); 但是,我得到了以下错误:元素隐式地具有“any”类型,因为类型“LanguageName”没有索引签名。 LanguageName是我为支持的对象创建的类型: type LanguageName={ [支持的语言中的语言]:字符串; }; 而supportedLanguages是一种
const userLanguage=browserLanguages.find(language=>!!支持的[language]);
但是,我得到了以下错误:元素隐式地具有“any”类型,因为类型“LanguageName”没有索引签名。
LanguageName
是我为支持的对象创建的类型:
type LanguageName={
[支持的语言中的语言]:字符串;
};
而supportedLanguages
是一种包含我们的应用程序支持的所有语言的类型:
type SupportedLanguages='en'|'es';
我认为通过显式调用将回调视为。请注意,您必须通过手动注释来完成此操作;编译器当前不支持
有多种方法可以做到这一点;这里有一个:
// make an explicit type guard for SupportedLanguages
function supportedLanguageGuard<T extends keyof any>(
x: T
): x is T & SupportedLanguages {
return !!(supported as any)[x];
}
// use it
const userLanguage: SupportedLanguages | undefined = browserLanguages.find(
supportedLanguageGuard
); // okay
好的,希望能有帮助。祝你好运
const browserLanguages = ["fr", "es"] as const; // TS3.4+