typescript扩展了一个不需要的接口

eng*_*can 18 javascript interface typescript

我有两个接口;

interface ISuccessResponse {
    Success: boolean;
    Message: string;
}
Run Code Online (Sandbox Code Playgroud)

interface IAppVersion extends ISuccessResponse {
    OSVersionStatus: number;
    LatestVersion: string;
}
Run Code Online (Sandbox Code Playgroud)

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

interface IAppVersion {
    OSVersionStatus: number;
    LatestVersion: string;
    Success?: boolean;
    Message?: string;
}
Run Code Online (Sandbox Code Playgroud)

我不想这样做.

Bra*_*rad 53

有点晚了,但是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
Run Code Online (Sandbox Code Playgroud)


Fen*_*ton 7

如果需要Success并且Message是可选的,可以执行以下操作:

interface IAppVersion {
    OSVersionStatus: number;
    LatestVersion: string;
    Success?: boolean;
    Message?: string;
}
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*rds 5

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

interface IAppVersion extends Omit<ISuccessResponse, 'Success' | 'Message'> {
  OSVersionStatus: number;
  LatestVersion: string;
  Success?: boolean;
  Message?: string;
}
Run Code Online (Sandbox Code Playgroud)