元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 React Typescript

Posted

技术标签:

【中文标题】元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 React Typescript【英文标题】:Element implicitly has an 'any' type because expression of type 'string' can't be used to index type React Typescript 【发布时间】:2021-05-04 10:40:00 【问题描述】:

如果类型喜欢它会是绿色或不喜欢它会是红色,我正在尝试为响应中的组件提供条件颜色。这可以在 javascript 中使用,但是使用 typescript 我会收到错误消息:

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“ like: string;不喜欢:字符串; '。在“ like: string; 类型”上找不到带有“string”类型参数的索引签名。不喜欢:字符串; '。

我对打字稿的反应相当陌生,所以我不太确定如何解决这个问题,所以任何帮助都会很棒!

import React from "react";
    import Text, View from "react-native";
    
    import styles from "./styles";
    
    const COLORS = 
        like: '#00edad',
        dislike: '#ff006f',
    
    
    const Choice = (type : type : string) => 
        const color = COLORS[type];
        return (
            <View style=[styles.container, borderColor: color]>
                <Text style=[styles.text, color]>type</Text>
            </View>
        )
    
    
    export default Choice;

【问题讨论】:

【参考方案1】:

您的 COLORS 对象定义了 2 个键值对:"like""dislike"。如果你尝试访问COLORS["foobar"],它会给你一个打字错误,因为它不是一个定义的键。

同样,您的type 被定义为string,并且不仅限于"like""dislike"。要约束它,您只需要允许它使用 "like""dislike" 键。

一种方法是说:

const Choice = (type : type : "like" | "dislike" ) => 

一种更稳健的方法是根据您的对象生成可能的值。

const Choice = (type : type : keyof typeof COLORS) => 

顺便说一句,你的 React 为你提供了泛型类型,你可以使用它让你输入表达式不那么混乱:

const Choice: React.FC<type : keyof typeof COLORS> = (type) => 

【讨论】:

以上是关于元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 React Typescript的主要内容,如果未能解决你的问题,请参考以下文章

元素隐式具有“任何”类型,因为字符串类型的表达式 | number 不能用于索引类型

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 - Phaser

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型 React Typescript

嵌套对象 -> 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型

TS7053:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“用户经济”

TypeScript - ts(7053):元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引