元素隐式地具有“ any”类型,因为在访问键为枚举的对象时,type ...没有索引签名

时间:2019-07-09 10:51:24

标签: reactjs typescript

我有一个处于状态的对象,我需要在输入组件内部动态访问其值

var selectedLangTab具有数字类型

我正在尝试通过以下方式获得价值: 值= {userInput.translations [selectedLangTab]。标题

错误:

  

元素隐式地具有“ any”类型,因为类型为'{0:{title:string; AdditionalInfo:字符串;内容:字符串;语言:语言; }; 1:{title:字符串; AdditionalInfo:字符串;内容:字符串;语言:语言; }; }'没有索引签名。

translations: {
  [Language.CS]: {
    title: 'Title CZ',
    additionalInfo: '',
    content: '',
    language: Language.CS
  },
  [Language.EN]: {
    title: 'Title EN',
    additionalInfo: '',
    content: '',
    language: Language.EN
  }
}

翻译界面:

translations: {
[key in Language]: {
  title: string;
  additionalInfo: string;
  content: string;
  language: Language;
}

};

语言界面:

export enum Language {
 CS,
 EN
}

1 个答案:

答案 0 :(得分:1)

问题是,如果您要使用- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { //Save the textField values } 进行索引,则translations具有来自0的两个属性(1enum)数字,不能保证数字在此范围内,因此会出错。

您可以将selectedLangTab定义为selectedLangTab0 | 1类型,以使错误消失:

Language

Playground link

或者您可以使用类型断言来告诉编译器您确定数字在适当的范围内:

let selectedLangTab: 0 | 1 = 1;

userInput.translations[selectedLangTab].title

Playground link