Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 将Array.find与自定义类型一起使用时出现类型错误_Typescript - Fatal编程技术网

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+