gpt4 book ai didi

Typescript:如何扩展嵌套字段的接口(interface)并向对象赋值?

转载 作者:行者123 更新时间:2023-12-02 19:37:16 27 4
gpt4 key购买 nike

考虑以下接口(interface):

interface MyType1 {
field1: string;
options: {
basicOption1: string;
basicOption2: string;
};
}

interface MoreOptions {
moreOptions1: string;
moreOptions2: string;
}

我扩展了接口(interface)MyType1的字段选项:

interface MyType2 extends MyType1{
options: {
basicOption1: string; // How to remove it, yet declared in MyType1
basicOption2: string; // How to remove it, yet declared in MyType1
moreOptions1: string;
moreOptions2: string;
};
}

如果我省略行:basicOptions1:string;basicOptions2:string;,编译器会提示。所以,我添加它们。但是,是否可以删除它们并仅保留行: moreOptions1:string;moreOptions2:string; 作为附加选项。

接下来,如何从 MyType1MoreOptions 类型的两个对象分配一个 Mytype2 类型的对象?

例如(Rq:我测试了其他东西但也不成功):

let myobj1: MyType1 = { field1:"field1", options:{ basicOption1:"basicOption1", basicOption2:"basicOption2" } };
let moreOptions: MoreOptions = { moreOptions1: "moreOptions1", moreOptions2: "moreOptions2" }

let myobj2: MyType2 = { ...myobj1, options: {...moreOptions} };

最佳答案

您可以将 options 属性所需的类型相交:

interface MyType2 extends MyType1 {
options: MyType1["options"] & MoreOptions
}

关于MyType2扩展MyType1和错误:

MyType1 中的现有属性(如 options)必须与 MyType2 中的相同,它们不会以某种方式被覆盖或合并。其他属性(例如 field1)会自动继承。


Following, how could I assign an object of type Mytype2 from two objects of type MyType1 and MoreOptions ?

您可以使用对象展开,这将合并所有对象,如果属性名称相同,请选择最右边的对象 ( Playground sample ):

declare const t1: MyType1;
declare const moreOpt: MoreOptions;
const t2: MyType2 = {...t1, options: {...t1.options, ...moreOpt}};

关于Typescript:如何扩展嵌套字段的接口(interface)并向对象赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60884834/

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