打字稿:用通用接口扩展接口

时间:2018-11-06 07:17:19

标签: typescript generics interface

假设我有界面:

interface IAddress {
    addressProperty: any;
}

有没有办法写类似这样的界面:

interface ILoadable<T> {
    loading: boolean;
}

所以我可以像这样使用它:

interface IStateSlice {
    address: ILoadable<IAddress>;
}

其中的地址将通过IAddress进行ILoadable扩展。

1 个答案:

答案 0 :(得分:2)

我认为您可以使用intersection types

interface IAddress {
    addressProperty: any;
}

interface ILoadable {
    loading: boolean;
}

interface IStateSlice {
    address: ILoadable & IAddress
}

然后使用它:

class StateSlice implements IStateSlice{
    address = {
        loading: false,
        addressProperty: 'lol'
    }
}

您还可以为此定义一个单独的类型

type LoadableAddress = ILoadable & IAddress

interface IStateSlice {
    address: LoadableAddress
}

或相同,使用接口扩展

interface LoadableAddress extends ILoadable, IAddress { }