打字稿中的界面模式

时间:2020-08-05 04:49:08

标签: typescript interface

我正在阅读一些代码,重复模式之一如下:

export interface IA {
    readonly IB: IB
}

export interface IB extends IA {
    name: string;
    dislayName: string;
}

具有一个具有单个只读接口属性的接口,然后使另一个接口扩展它的优点是什么?这是常见的设计模式吗?另外,还有一个循环类型引用。为什么不抛出错误?

1 个答案:

答案 0 :(得分:0)

您可以在提供信息的地方建模,例如关于父级层次结构。

const bla: IA = {
    name: '1st level',
    displayName: '1st',
    IB: {
        name: '2nd level',
        displayName: '2nd',
        IB: {
            name: '3rd level',
            displayName: '3rd',
            IB: {
                ...
            }
        }
    }
}

但是这不符合打字稿,因为始终需要定义IB(直到无穷大)-因此,除非您告诉打字稿忽略它,否则您无法自己定义它。我怀疑这是服务器发出某种响应的类型,但未知该结构的深度。

我猜正确的界面应该是(如果我的理解正确的话)

export interface IB extends Partial<IA> {
    name: string;
    dislayName: string;
}

这将允许信息的深层嵌套