我正在用打字稿写以下内容,并看到以下错误
const WEEKDAYS_SHORT = {
en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
};
<StyledDayPicker weekdaysShort={WEEKDAYS_SHORT[language]} />
类型'string []'不能分配给类型'[string,string,string,string,string,string,string]'。 类型'string []'中缺少属性'0'。 [2322]
我尝试了以下操作,这给了我一个错误。
const WEEKDAYS_SHORT: string[] = {
en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
};
答案 0 :(得分:1)
weekdaysShort
期望一个长度为7的字符串元组。默认情况下,typescript会推断出fir数组文字的数组。一种简单的解决方案是为美国提供一个额外的功能来帮助推断:
const stringTuple = <T extends string[]>(...a: T) => a;
const WEEKDAYS_SHORT = {
en: stringTuple('S', 'M', 'T', 'W', 'T', 'F', 'S'),
de: stringTuple('S', 'M', 'D', 'M', 'D', 'F', 'S')
};
或者您可以使用类型断言:
type Tuple7 = [string,string,string,string,string,string,string]
const WEEKDAYS_SHORT = {
en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'] as Tuple7,
de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'] as Tuple7,
};
或者在打字稿3.4(目前未发布)中,您可以断言as const
以使编译器推断出一个只读元组:
const WEEKDAYS_SHORT = {
en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
} as const;
还取决于您的编译器设置,并且language
应该为'en' | 'de'
,以使索引工作。
答案 1 :(得分:0)
您的变量应这样定义:
const WEEKDAYS_SHORT: { [prop: string]: string[] } = {
en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
};