如果我有这两个对象
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;
发布于 2018-05-30 06:19:44
您可以键入解析为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;
https://stackoverflow.com/questions/50593562
复制相似问题