我的应用程序中有一个接口:
interface Asset {
id: string;
internal_id: string;
usage: number;
}
这是后界面的一部分:
interface Post {
asset: Asset;
}
我还有一个用于后期草稿的接口,其中资产对象可能只是部分构建的
interface PostDraft {
asset: Asset;
}
我希望允许PostDraft
对象具有部分资产对象,同时仍然检查属性的类型(因此我不想用任何
替换它)。
我基本上想要一种能够生成以下内容的方法:
interface AssetDraft {
id?: string;
internal_id?: string;
usage?: number;
}
而无需完全重新定义Asset
接口。有办法做到这一点吗?如果不是,在这种情况下安排我的类型的明智方法是什么?
接口中的属性要么是可选的,要么不是,你不能使用同一个接口一次作为可选,一次作为必须。
您可以做的是拥有一个包含 AssetDraft
可选属性的接口,然后是一个具有资产
必需属性的类:
interface AssetDraft {
id?: string;
internal_id?: string;
usage?: number;
}
class Asset {
static DEFAULT_ID = "id";
static DEFAULT_INTERNAL_ID = "internalid";
static DEFAULT_USAGE = 0;
id: string;
internal_id: string;
usage: number;
constructor(draft: AssetDraft) {
this.id = draft.id || Asset.DEFAULT_ID;
this.internal_id = draft.internal_id || Asset.DEFAULT_INTERNAL_ID;
this.usage = draft.usage || Asset.DEFAULT_USAGE;
}
}
此处的默认值是静态成员,但您可以通过其他方式获取这些值,或者在缺少它们时引发错误。
当处理从服务器接收的json(或类似的东西)时,我发现这种方式非常方便,接口表示JSON数据,类是使用JSON作为初始值构建的实际模型。
如果我想有一个明确的 AssetDraft
接口,我会使用 extend
和 Part
的组合:
interface Asset {
id: string;
internal_id: string;
usage: number;
}
interface AssetDraft extends Partial<Asset> {}
这在TypeScript中是不可能的
为此,请使用< code >分部
interface PostDraft {
asset: Partial<Asset>;
}
现在<code>资产</code>上的所有属性都是可选的,这将允许您执行以下操作:
const postDraft: PostDraft = {
asset: {
id: "some-id"
}
};
关于<code>部分
部分
type Partial<T> = {
[P in keyof T]?: T[P];
};
在此处和手册中阅读有关映射类型的更多信息。
深部分
如果您想要在对象上递归工作的部分实现,那么可以在TS 4.1中使用以下类型:
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
总之,是否可以有一个声明某些基属性但不限制其他属性的接口?这是我目前的情况: 我使用的是Flux模式,它定义了一个通用调度器: 然后,我用自己的有效负载类型创建一个调度程序,如下所示: 现在我有了一些动作代码,它应该分派一个带有一些附加数据的有效负载,但是< code>ActionPayload接口只允许< code>actionType。换句话说,这段代码: 给出编译错误,因为与接口不匹配。问题
假设有一个类库X的输入文件,其中包含一些接口。 为了使用这个库,我需要传递一个与。当然,我可以在源文件中创建相同的接口: 但这样一来,我就有了让它和库中的一个保持最新的负担,而且它可能非常大,并导致大量代码重复。 因此,有没有办法“提取”接口的这个特定属性的类型?类似于(这不起作用,导致“找不到名称I2”错误)。 编辑:在TS操场上玩了一会儿后,我注意到以下代码完全实现了我想要的: 但是,它需要声
我在spring-boot项目中有一个properties类。 现在,我想将的application.properties文件中的其他属性设置默认值。与下面的示例使用@value所做的类似
在Enterprise Architect中,可以在特定的关系图中隐藏连接器。开发外接程序(扩展),我需要通过“代码”执行这样的动作,但是我找不到连接器/关系图类的相应属性。 如果有人能帮助找到设置连接器可见性的相关属性,我将不胜感激。
我正在处理一个Spring启动项目,其中传递了许多VM参数供应用程序启动,即证书位置、特定配置文件类型(不是dev、qa、prod等)。0/>file. 问题语句 default.yml中设置的属性仅可访问Spring上下文的环境接口,即org.springframework.core.env.环境,并且属性不会自动/默认设置为系统属性。 I 但是我不想使用环境. getProperty(key)
我有一个带有自定义对象的列表,希望迭代它并将值设置为true/false。