首页 > 解决方案 > 类型“未定义”不能用作索引类型。ts(2538)

问题描述

我是打字稿初学者,如您所见,我为道具设置了类型,但出现错误:类型“未定义”不能用作索引类型.ts(2538) (property) AA.action?: string | 不明确的

有什么建议/帮助吗?我的代码:

interface AA {
  action?: string;
  actionArgs?: string;
}

const ArticleList: React.FC<AA> = (props) => {
  const data = useSelector((state: RootStateOrAny) => {
    const secondData = {
      sites: state.articles.sites,
      analysers: state.siteArticles.analysers,
    };

    return secondData[props.action];
  });

如果我删除可选然后得到更多错误:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{网站:任何; 分析仪:任何;}'。在类型 '{ sites: any; 上找不到具有类型参数的索引签名。分析仪:任何;}'.ts(7053)

标签: javascriptreactjstypescriptfunctionreact-hooks

解决方案


interface AA {
  action: keyof MySecondData;
  actionArgs?: string;
}

interface MySecondData {
  sites: string_I_guess[],
  analysers: Analysers[],
};

const ArticleList: React.FC<AA> = (props) => {
  const data = useSelector((state: RootStateOrAny) => {
    const secondData: MySecondData = {
      sites: state.articles.sites,
      analysers: state.siteArticles.analysers,
    };

    return secondData[props.action];
  });


推荐阅读