gpt4 book ai didi

typescript :如何键入休息对象解构

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

如果我有这两个对象

interface Input {
one?: string;
two?: string;
c?: string
}

interface Data {
one?: string;
a?: string;
b?: string;
c?: string
}

目前我必须做类似的事情

const { one, two, ...restOfData } = input;
const data: Data = {...restOfData};

是否可以直接输入...restOfData

我希望能够做到这一点

const { one, two, ...data } = input;
data.one = 'test' + one;
data.a = one;

最佳答案

您可以将解构键入为 Input 和具有来自 Data 但可选的所有字段的类型的交集。对于“可选数据”类型,您可以使用内置的 Partial输入:

const { one, two, ...data }: Input & Partial<Data> = input; 
// data type is inferred as data: { c: string; a?: string; b?: string; }
// so you now can
data.a = one;

如果您希望某些属性保留在 data 对象中,我想不出比进行两次解构更好的方法了,一个没有“rest”对象,另一个有它。如果你想让 one 保留在 data 中,但删除 two,你可以这样做

interface Input {
one?: string;
two?: string;
c?: string
}

interface Data {
one?: string;
a?: string;
b?: string;
c?: string
}
let input: Input;

const { one } = input;
const { two, ...data }: Input & Data = input;

data.one = 'test' + one;
data.a = one;

如果你想保留所有属性,你可以像这样将data作为input的浅拷贝

const { one, two } = input;
const { ...data }: Input & Data = input;

关于 typescript :如何键入休息对象解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593562/

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