Javascript 如何在map()中声明此变量的类型

Javascript 如何在map()中声明此变量的类型,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,以下是所讨论的功能: const getCountryLangCode = (countryCode: string) => { const filtered = Object.entries(config.languages) .map(([key, language]) => { if (language.code.split('-')[1] === countryCode) { return language.code

以下是所讨论的功能:

  const getCountryLangCode = (countryCode: string) => {
    const filtered = Object.entries(config.languages)
      .map(([key, language]) => {
        if (language.code.split('-')[1] === countryCode) {
          return language.code
        }
      })
      .filter(item => item)
  
    const langCode = filtered[0]
  
    return langCode
  }
问题是map()函数中的“language”是type=unknown,当我尝试构建我的React应用程序时,由于该类型
对象的类型为“unknown”,它无法构建。TS2571

我已经尝试了我能想到的每一个版本的输入语法,将“any”类型提供给“language”,但我做得不对


声明语言应该是type==any的正确方法是什么?

要回答您的问题,请将type放在
对象上

。。。
const filtered=Object.entries(config.languages)
.map([key,language])=>{
...
请参见
条目之前(和之后)的
条目
。这样,您将在传入的
条目
参数上放置特定类型,在您的示例中是
配置语言

向上声明类型 如果可以,您总是希望声明链中较高的类型。您要求“在
map()
中声明此变量的类型”但是您需要声明
config
变量的类型。在
config.languages
对象上拥有正确的类型将允许Typescript自己推断
对象的类型。条目
.map()
.filter()

config
是一个
对象
带有属性
语言
。该
语言
属性是一个
对象
,其中每个值都是一个
对象
带有属性
代码
,该属性是一个
字符串
。当我们有一个所有值都是相同类型的对象时,我们使用类型脚本

interface MyConfig {
  languages: Record<string, {code: string}>
}
如果
config
具有类型
MyConfig
,则
find()
回调中的变量
languages
将自动获取类型
{code:string}
,因为Typescript知道
config.languages
对象的值类型

我们之所以使用,是因为
find
不能保证找到匹配项,因此
match
可能是
undefined
。我们的函数返回
string | undefined


为什么要在
.map()
中“过滤”数组,然后再次使用
.filter()
来修复
.map()
的错误用法?您想要的是
数组.prototype.find()
而不是
.map().filter()[0]
constructThank@Andreas-我试图调试的是其他人的代码。我也没有很好地理解它,正是因为map的使用对于预期的结果来说过于复杂。下面的答案解决了这个问题,但最终我意识到,当我们想要的只是一个简单的函数时,整个函数太复杂了从已知键中删除值。
const match = Object.values(config.languages).find(
  language => language.code.split('-')[1] === countryCode
);
return match?.code;