我有一个这样定义的接口:
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[];
};
} | {}
但是我不明白为什么这样做是必要的。
有人可以解释吗?