打字稿不需要扩展接口

typescript extend an interface as not required

我有两个接口;

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;
}

我不想这样做。

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

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

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

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

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

有点晚了,但是 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

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

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