TypeScript中如何将接口扩展为非必需属性。

39
我有两个接口;
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;
}

我不想做这件事。


你的意思是说在IAppVersion中,你希望Success和Message是可选的吗? - Ross Scott
4个回答

89

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

9
如果你想让SuccessMessage是可选的,你可以这样做:
interface IAppVersion {
    OSVersionStatus: number;
    LatestVersion: string;
    Success?: boolean;
    Message?: string;
}

您不能使用 extends 关键字引入 ISuccessResponse 接口,然后更改该接口中定义的协定(该接口说明它们是必需的)。


9
从TypeScript 3.5开始,你可以使用Omit
interface IAppVersion extends Omit<ISuccessResponse, 'Success' | 'Message'> {
  OSVersionStatus: number;
  LatestVersion: string;
  Success?: boolean;
  Message?: string;
}

1
你的基础接口可以将属性定义为可选的:
interface ISuccessResponse {
    Success?: boolean;
    Message?: string;
}
interface IAppVersion extends ISuccessResponse {
    OSVersionStatus: number;
    LatestVersion: string;
}
class MyTestClass implements IAppVersion {
    LatestVersion: string;
    OSVersionStatus: number;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接