gpt4 book ai didi

typescript - 使用 TypeScript 通用接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:58 24 4
gpt4 key购买 nike

我有几种类型的对象,如文章、部门、个人资料等。我为每种对象定义了一个接口(interface),基本上:

interface IArticle {
title: string;
body: string;
}

interface IProfile {
name: string;
email: string;
}

interface IDivision {
name: string;
leader: IProfile;
}

现在我想在某些情况下能够添加 formTitle在显示表单的页面上使用这些属性时。我以为我可以做这样的事情:

// Failed
interface IForm<T> {
formTitle: string;
}

function formDisplay(resource: IForm<IProfile>) { }

但是当我这样做时,我收到一条错误消息,指示对象属性(在本例中为 nameemail)在类型 IForm<IProfile> 上不存在.所以我想这不是泛型的正确用法。来自 Ruby 和 JavaScript,我对整个静态类型仍然是新手。

为了解决这个问题,我一直在为每个对象编写单独的接口(interface),如下所示:

// Not reusable
interface IArticleForm extends IArticle {
formTitle: string;
}

我能想到的另一种选择是向基接口(interface)添加一个可选属性,然后从那里扩展常规对象接口(interface)。

// Does not provide helpful type checking
interface IBase {
formTitle?: string;
}
interface IArticle extends IBase { }

但我想要formTitle在这些表单页面上是必需的,这样我就不会忘记设置它。有没有办法以可重用的方式将一组必需的属性应用于多个对象?

最佳答案

看起来您正在寻找交叉点类型。这允许您将行为混合在一起。您甚至可以为新创建的类型取一个方便的名称来描述其用法。

对于您的示例使用:

interface IProfile {
name: string;
email: string;
}
interface IForm {
formTitle: string;
}
type IProfileForm = IForm & IProfile;

function formDisplay(resource: IProfileForm) { }

关于typescript - 使用 TypeScript 通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com