我试图对我的某个接口进行扩展,但是在{dcs:Relationship}类型中使用以下代码段继续收到错误"索引签名:
interface Relationship {
data: {
id: string;
type: string;
}
}
interface T {
relationships: {[key: string]: Relationship};
}
interface Test extends T {
relationships: {
dcs: Relationship;
};
}
目标是将T中的relationships属性作为一个对象,其中任意数量的键都是关系类型。测试应该是T类型的特定实现。
不确定接近这个的正确方法是什么。提前谢谢!
答案 0 :(得分:0)
像这样声明Test
:
interface Test extends T {
relationships: {
[key: string]: Relationship;
dcs: Relationship;
};
}
但是,正如您已经注意到,在实际实现接口时,最终必须再次声明索引器。你可以通过这样做来节省一些打字:
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;
}
答案 1 :(得分:0)
如果类型不必是接口,那么也是一种解决方案!是使用对象文字类型
((但是,将索引签名添加到接口可能是一个更好的选择))这表明我们也可以做到这一点!
例如:
export type SignalProcessorEvents = {
valueCandle: (
value: WhalesCandle,
storageType: StorageType | undefined
) => void
}
使用界面时(打字稿抱怨)
切换到对象文字时
想要查看的扩展代码:
export class Events<EventsObject extends { [eventName: string]: (...args: any[]) => void}> {
protected _events: EventsObject = {} as any;