类型'{}'中缺少索引签名。ts(2322)

时间:2020-10-21 20:55:30

标签: typescript typescript-typings

我有一个这样定义的接口:

export interface RelationsObj = {
  [key: string]: {
    [key: string]: Relation[];
  };
}

据我了解,这可以解释一个这样的对象:

{
  a: {
    b: [relation1, relation2],
    c: [relation3, relation4]
  }
}

具有任意数量的第一级属性('a')。因此,它也可能只是一个具有0个属性的空对象。

在我调用的函数中,结果具有上述类型,可能的结果为{}。现在Typescript引起了这个问题,我不明白。输出类型的定义如下:

// FYI 
interface CalculatePositionsResult {
  relations: RelationsObj;
}

我得到的错误是:


Type '(data: any) => { relations: {}; }' is not assignable to type '(props: any) => CalculatePositionsResult'.
  Call signature return types '{ relations: {}; }' and 'CalculatePositionsResult' are incompatible.
    The types of 'relations' are incompatible between these types.
      Type '{}' is not assignable to type 'RelationsObj'.
        Index signature is missing in type '{}'.ts(2322)

当我明确允许使用空对象时,此问题已解决:

export type RelationsObj = {
  [key: string]: {
    [key: string]: Relation[];
  };
} | {}

但是我不明白为什么这样做是必要的。

有人可以解释吗?

0 个答案:

没有答案