打字稿:扩展接口时类型中缺少索引签名

Ale*_*oni 8 typescript

我正在尝试扩展我的一个接口,但不断收到错误“{dcs:Relationship} 类型中缺少索引签名,使用以下代码段:

interface Relationship {
    data: {
        id: string;
        type: string;
    }
}

interface T {
    relationships: {[key: string]: Relationship};
}

interface Test extends T {
    relationships: {
        dcs: Relationship;
    };
}
Run Code Online (Sandbox Code Playgroud)

目标是使 T 中的关系属性成为具有任意数量的关系类型的键的对象。测试应该是类型 T 的特定实现。

不知道解决这个问题的正确方法是什么。提前致谢!

Vad*_*gon 2

Test像这样声明:

interface Test extends T {
  relationships: {
    [key: string]: Relationship;
    dcs: Relationship;
  };
}
Run Code Online (Sandbox Code Playgroud)

但是,正如您所注意到的,当您实际实现该接口时,您最终必须再次声明索引器。您可以通过执行以下操作来节省一些打字时间:

interface T {
  relationships: {
    [key: string]: Relationship;
  };
}

interface TestRelationships {
   [key: string]: Relationship;
   dcs: Relationship;
}

interface Test extends T {
  relationships: TestRelationships;
}

class T1 implements Test {
  relationships: TestRelationships;
}
Run Code Online (Sandbox Code Playgroud)