typescript 根据需要扩展接口

Posted

技术标签:

【中文标题】typescript 根据需要扩展接口【英文标题】:typescript extend an interface as not required 【发布时间】: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 中是可选的吗? 【参考方案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;

【讨论】:

以上是关于typescript 根据需要扩展接口的主要内容,如果未能解决你的问题,请参考以下文章

转载:TypeScript 简介与《TypeScript 中文入门教程》

Typescript 扩展通用接口

在 TypeScript 中扩展参数化接口的通用接口

在 TypeScript 中,一个接口可以扩展一个类,这是为了啥?

扩展嵌套 typescript 接口

为 TypeScript 扩展控制台接口