我想在TS中制作简单的字典。
可以,但是出现错误:
元素隐式地具有“ any”类型,因为类型为“ {'票务字段是必需的。”:字符串; “所选票证无效。”:字符串; }'没有索引签名。
我的代码:
const translation = {
'The ticket field is required.': 'Musisz podać numer swojego biletu.',
'The selected ticket is invalid.': 'Wybrany bilet jest nieprawidłowy.'
};
this.error = translation['The ticket field is required.'];
答案 0 :(得分:2)
当您这样声明值translation
时:
const translation = {
'The ticket field is required.': 'Musisz podać numer swojego biletu.',
'The selected ticket is invalid.': 'Wybrany bilet jest nieprawidłowy.'
};
您将省略类型声明。这意味着translation
被隐式键入 。如果要显式声明各个类型,则const声明应如下所示:
const translation:
{
//This is the type declaration
'The ticket field is required.': string;
'The selected ticket is invalid.': string;
} = {
//This is the value
'The ticket field is required.': 'Musisz podać numer swojego biletu.',
'The selected ticket is invalid.': 'Wybrany bilet jest nieprawidłowy.'
};
由于您将值声明为const
,所以编译器知道唯一的属性就是您提供的属性。
当您现在像...那样访问您的类型时
this.error = translation['The ticket field is required.'];
...您将其用作映射类型。由于编译器看不到(因为未检查)您提供的键与推断类型的属性名称之一匹配,因此它将假定表达式translation['The ticket field is required.']
的类型为{{1 }}。由于这是一个隐式any
,并且您处于严格模式,因此会出现错误。
简单的解决方案是为您的值提供显式输入:
any
答案 1 :(得分:1)
只需尝试提供类型提示:
const translation = {
'The ticket field is required.': 'Musisz podać numer swojego biletu.',
'The selected ticket is invalid.': 'Wybrany bilet jest nieprawidłowy.'
} as { [index:string] : string };