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】:如果您希望 Success
和 Message
是可选的,您可以这样做:
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 中文入门教程》