Typescript 和 React 中的嵌套映射返回错误,此表达式不可调用

Posted

技术标签:

【中文标题】Typescript 和 React 中的嵌套映射返回错误,此表达式不可调用【英文标题】:Nested map in Typescript and React return error this expression is not callable 【发布时间】:2021-05-05 02:01:40 【问题描述】:

我正在使用带有 React 的 Typescript,我想从这个函数返回一些 JSX。我从来没有遇到过嵌套地图循环的问题,但由于某种原因,我现在使用 Typescript 时遇到了错误。像这样进行嵌套循环是不好的做法吗?它给了我一个“这个表达式不可调用”的错误。

更新:代码运行,但 .map 以红色突出显示,它不允许我构建项目。见下图。

const getSelect = () => 
    return <div>
        
            options.map( (option, index) => 
                return <div>
                    <p>option.name</p>
                    
                        option.values.map( (value) => 
                            return <p>value</p>
                        )
                    
                </div>
            )
        
    </div>


const options: Option[] = [
    
        name: "categories",
        values: ["cameras", "rolls", "magazine"]
    ,
    
        name: "type",
        values: ["point-and-shoot", "slr", "for beginners"]
    ,
    
        name: "availability",
        values: ["available only"]
    
]

export type Option = 
  name: string;
  values: string[] | number[];

【问题讨论】:

您的代码似乎没有任何问题。可以发一下options的结构吗? 您不检查 option.values 是否为数组。确定 option.values 存在并且是数组类型? 添加检查 option.values.langth > 0 && option.values.map(value => ... @DeanJames,我发布了期权结构 @Robert,option.values 存在,查看Option结构 【参考方案1】:

所以我做了更多的研究并解决了这个问题。我在嵌套地图中添加了联合类型,现在一切正常。

(option.values as (string | number)[]).map( (value) => 
                                    return <p>value</p>
                                )

【讨论】:

[...option.values].map().. 也可以 :) 但我认为通过 Array 构造函数声明类型更简洁【参考方案2】:

喜欢这个

export type Option = 
  name: string;
  values: string[] | number[];

【讨论】:

以上是关于Typescript 和 React 中的嵌套映射返回错误,此表达式不可调用的主要内容,如果未能解决你的问题,请参考以下文章

Esri 使用 React 和 Typescript 映射

TypeScript 映射类型:带有嵌套的标志类型

TypeScript中的嵌套递归类型提示?

如何在 Angular 2 的 TypeScript 中映射嵌套的 Json

如何在 React 和 Typescript 中映射我的 Union 类型的 GraphQL 响应数组

如何为 React Native 嵌套组件创建 Typescript 定义