Typescript类型Never []无法分配给对象数组

时间:2019-10-21 06:41:38

标签: typescript

我正在尝试创建一个对象数组,例如:

objectExample[a].push({ id: john, detail: true });
objectExample[a].push({ id: james, detail: false});

const objectExample = {
   a = [ { id: john, detail: true}, 
         { id: james, detail: false}];
   }

如果我在Typescript中尝试此操作:

const objectExmaple: { [key: string]: { [key: string]: string | boolean}[]} = [];

我在objectType上遇到此错误:

Type 'never[]' is not assignable to type '{ [key: string]: { [key: string]: string | boolean; }[]; }'.
  Index signature is missing in type 'never[]'.ts(2322)

如何解决此错误?

2 个答案:

答案 0 :(得分:0)

有一些问题:

  • 如果它是一个对象,则无法将objectExample初始化为[]
  • 类型定义非常复杂
type Item = { [key: string]: string | boolean}
// Same as type Item = { [key: string]: string | boolean}

const objectExample: Record<string, Item[]> = {
   a: [ { id: 'john', detail: true}, 
         { id: 'james', detail: false}]
}

objectExample.a.push({ id: 'john', detail: true });
objectExample.a.push({ id: 'james', detail: false});

Here是指向工作场所的链接

答案 1 :(得分:0)

objectExmaple是一个对象,而不是数组,因此您需要使用{}对其进行初始化。另外,如果您希望键a有一个数组,则需要在初始化时或在使用push之前将其放入数组:

const objectExmaple: { [key: string]: { [key: string]: string | boolean }[] } = {
  a: []
};

objectExmaple['a'].push({ id: 'john', detail: true });
objectExmaple['a'].push({ id: 'james', detail: false});

也可以将类型更清晰地写为Record<string, Array<Record<string, string | boolean>>>

Play