首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TypeScript,我如何扩展可以是多种类型之一的接口?

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

Stack Overflow用户
提问于 2019-09-23 20:45:17
回答 2查看 871关注 0票数 3
代码语言:javascript
复制
type SkuItem = ChildSkuItem & {
    childSkus: ChildSkuItem[],
};

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

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

但是,这会给出一个错误:

代码语言:javascript
复制
An interface can only extend an identifier/qualified-name with optional type arguments.ts(2499)

我做错了什么?更重要的是,我该如何做好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 21:00:01

interface可以扩展多个接口(即将它们完全组合在一起),但是Array让它变得有点奇怪,因为您希望它是一种类型或另一种类型,extends将无法工作。

您可以使用type来实现这一点。

代码语言:javascript
复制
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 Playground

票数 2
EN

Stack Overflow用户

发布于 2019-09-23 21:00:45

你不能扩展,你必须使用交叉点类型:

代码语言:javascript
复制
export type GetSkuItemsResponse = (Array<SkuItem> | SkuItemsErrSkuResponse) & {
    ...
}

TypeScript Playground

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58062771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档