【问题标题】:write an object with keys and array typescript用键和数组打字稿写一个对象
【发布时间】:2019-06-30 14:58:45
【问题描述】:

我正在打字稿中写以下内容并看到以下错误

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]'。 “字符串 []”类型中缺少属性“0”。 [2322]

我已经尝试了以下这给我一个错误。

const WEEKDAYS_SHORT: string[] = {
    en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
    de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
};

【问题讨论】:

标签: javascript typescript


【解决方案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,
};

或者在 typescript 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' 才能使索引正常工作。

【讨论】:

  • 对这个“Typescript King”有任何想法 - stackoverflow.com/questions/54575523/…
  • @peterflanagan :)) 我可以看看
  • 我想我已经弄清楚了/那里的答案回答了它。这是一个反应问题,而不是一个问题
【解决方案2】:

你的变量应该这样定义:

const WEEKDAYS_SHORT: { [prop: string]: string[] } = {
    en: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
    de: ['S', 'M', 'D', 'M', 'D', 'F', 'S'],
};

【讨论】:

  • 它还在抱怨。也是 prop 关键字,或者我可以在那里使用任何东西。如下所述,这是因为它需要一个长度为 7 的字符串元组。我不知道这个
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2018-11-28
相关资源
最近更新 更多