【问题标题】:typescript extend an interface as not requiredtypescript 根据需要扩展接口
【发布时间】:2015-06-21 10:10:58
【问题描述】:

我有两个接口;

interface ISuccessResponse {
    Success: boolean;
    Message: string;
}

interface IAppVersion extends ISuccessResponse {
    OSVersionStatus: number;
    LatestVersion: string;
}

我想将 ISuccessResponse 接口扩展为不需要; 我可以覆盖它,但还有其他选择吗?

interface IAppVersion {
    OSVersionStatus: number;
    LatestVersion: string;
    Success?: boolean;
    Message?: string;
}

我不想这样做。

【问题讨论】:

  • 您的意思是您希望 Success 和 Message 在 IAppVersion 中是可选的吗?

标签: javascript interface typescript


【解决方案1】:

如果您希望 SuccessMessage 是可选的,您可以这样做:

interface IAppVersion {
    OSVersionStatus: number;
    LatestVersion: string;
    Success?: boolean;
    Message?: string;
}

不能使用extends 关键字引入ISuccessResponse 接口,然后更改该接口中定义的合同(该接口表示它们是必需的)。

【讨论】:

    【解决方案2】:

    您的基本接口可以将属性定义为可选:

    interface ISuccessResponse {
        Success?: boolean;
        Message?: string;
    }
    interface IAppVersion extends ISuccessResponse {
        OSVersionStatus: number;
        LatestVersion: string;
    }
    class MyTestClass implements IAppVersion {
        LatestVersion: string;
        OSVersionStatus: number;
    }
    

    【讨论】:

      【解决方案3】:

      有点晚了,但是 Typescript 2.1 引入了 Partial<T> 类型,它可以满足您的要求:

      interface ISuccessResponse {
          Success: boolean;
          Message: string;
      }
      
      interface IAppVersion extends Partial<ISuccessResponse> {
          OSVersionStatus: number;
          LatestVersion: string;
      }
      
      declare const version: IAppVersion;
      version.Message // Type is string | undefined
      

      【讨论】:

        【解决方案4】:

        从 TypeScript 3.5 开始,您可以使用 Omit:

        interface IAppVersion extends Omit<ISuccessResponse, 'Success' | 'Message'> {
          OSVersionStatus: number;
          LatestVersion: string;
          Success?: boolean;
          Message?: string;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-30
          • 2020-06-09
          • 2016-07-06
          • 2017-10-21
          • 2020-04-09
          • 2018-06-20
          • 2018-04-09
          • 1970-01-01
          相关资源
          最近更新 更多