使用TypeScript,如何扩展一个可以是多种类型之一的接口?

3
type SkuItem = ChildSkuItem & {
    childSkus: ChildSkuItem[],
};

type SkuItemsErrSkuResponse = {
    errorCode: string;
    errorMessage: string;
}

export interface GetSkuItemsResponse extends Array<SkuItem> | SkuItemsErrSkuResponse {}

然而,这会导致错误:
An interface can only extend an identifier/qualified-name with optional type arguments.ts(2499)

我做错了什么?更重要的是,我该怎么做才能做对呢?

相关技术与IT相关。
2个回答

2
一个接口可以扩展多个接口(即完全组合它们),但是 Array 使它有点奇怪,因为你希望它只是一种类型或另一种类型,所以 extends 不能工作。相反,你可以使用 type 来实现这个功能。
type ChildSkuItem = {};

type SkuItem = ChildSkuItem & {
    childSkus: ChildSkuItem[],
};

type SkuItemsErrSkuResponse = {
    errorCode: string;
    errorMessage: string;
}

export type GetSkuItemsResponse = SkuItem[] | SkuItemsErrSkuResponse;

let x: GetSkuItemsResponse = { errorCode: '', errorMessage: '' };
let xx: GetSkuItemsResponse = [];

TypeScript 演练场


除了 childSkus 不应该是顶级的。它要么是一个数组,要么是错误对象。 - Shamoon
@Shamoon 我曾试图展示扩展多个接口的情况以及其外观,但现在我已将其删除。 - crashmstr

2

你不能使用继承,必须使用交叉类型:

export type GetSkuItemsResponse = (Array<SkuItem> | SkuItemsErrSkuResponse) & {
    ...
}

TypeScript Playground

TypeScript Playground

是一个在线的 TypeScript 代码编辑器,可以帮助开发人员快速编写和测试 TypeScript 代码。它提供了丰富的功能,如自动完成、语法高亮、错误提示等,使得编写 TypeScript 代码更加轻松和高效。无论是初学者还是有经验的开发人员,都可以通过 TypeScript Playground 来提高自己的 TypeScript 编程技能。

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