在打字稿中创建数组类型[关闭]

Posted

技术标签:

【中文标题】在打字稿中创建数组类型[关闭]【英文标题】:Creating an array type in typescript [closed] 【发布时间】:2020-06-20 17:07:37 【问题描述】:

我在 typescript 中创建了一个数组类型,看起来像这样

export type RamenApi = [
    
        "Brand": string,
        "Variety": string,
        "Style": string,
        "Country": string,
        "Stars": number,
        "Top Ten": string
    
]

现在,在我对数组进行排序和过滤的地方之一,我收到以下错误

Property '0' is missing in type ' "Brand": string; "Variety": string; "Style": string; "Country": string; "Stars": number; "Top Ten": string; []' but required in type 'RamenApi'

知道为什么我会收到以下错误以及如何解决它吗?

  type Props = 
        searchData: RamenApi, 

    const [filteredSearch, setFilteredSearch] = useState<RamenApi | null>(null)


 const searchData = props
            const tempFilteredSearch = []
                for (let i=0; i<searchData.length; i++) 
                    const currentResponse = searchData[i]
                    const searchVariable = currentResponse["Variety"].toLowerCase() + currentResponse["Brand"].toLowerCase() + currentResponse["Country"]
                    if (searchVariable.indexOf(text) > - 1) 
                        tempFilteredSearch.push(currentResponse)
                    
                
                setFilteredSearch(tempFilteredSearch.slice(0,5))

这是我收到错误setFilteredSearch(tempFilteredSearch.slice(0,5)) 的地方。此外,代码被缩短了。忽略缺少的括号或任何此类错误

【问题讨论】:

如果没有看到该错误消息所引用的代码,任何人都无法回答这个问题。请写minimal reproducible example。 看看***.com/a/51467301/7867822 您定义的类型的意思是“包含一个元素的数组,并且该元素是具有字段的对象:字符串类型的“品牌”,“品种”......”。但是,您尝试将包含多个项目的数组设置为您的类型的状态 @Shlang 好的,那么我如何创建我的类型以包含多个项目? 我不确定我是否理解您想要实现的目标。如果你只想拥有一个字符串数组,它是string[],如果你想确保只有有限的字符串值集可以放入数组,它是("Brand" | "Variety" ...)[] 【参考方案1】:

type 或类型 interface 的形状将与该数组中的对象相同并且很可能相同。

创建类似的东西

export type RamenApi = 
        Brand: string,
        Variety: string,
        Style: string,
        Country: string,
        Stars: number,
        TopTen: string
    

然后

searchData: RamenApi[], 

const [filteredSearch, setFilteredSearch] = useState<RamenApi[] | null>(null)

【讨论】:

【参考方案2】:

我认为有一个错字。 那里声明的内容 - 是一种总是有一个指定结构的单个项目的类型。

我可能假设其意图是声明可能具有 0 到 N 个已定义结构的数组,那么语法应该是这样的:

export type RamenApi = 
    "Brand": string,
    "Variety": string,
    "Style": string,
    "Country": string,
    "Stars": number,
    "Top Ten": string
[]

【讨论】:

以上是关于在打字稿中创建数组类型[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿的泛型类中创建类型为“T”的新对象?

打字稿中的全局类型

在打字稿中创建对象

在打字稿中创建随机字符串[重复]

打字稿联合类型具有误导性[关闭]

如何在打字稿接口/类型中将枚举值类型转换为数组?