首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Typescript:如何键入rest对象分解

Typescript:如何键入rest对象分解
EN

Stack Overflow用户
提问于 2018-05-30 05:57:40
回答 1查看 4.4K关注 0票数 8

如果我有这两个对象

代码语言:javascript
复制
interface Input {
    one?: string;
    two?: string;
    c?: string
}

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

目前我必须做一些类似这样的事情

代码语言:javascript
复制
const { one, two, ...restOfData } = input;
const data: Data = {...restOfData};

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

我希望能够做到这一点

代码语言:javascript
复制
const { one, two, ...data } = input;
data.one = 'test' + one;
data.a = one;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 06:19:44

您可以键入解析为Input和一个类型的交集,该类型包含Data中的所有字段,但可选。对于“可选数据”类型,您可以使用内置的Partial类型:

代码语言:javascript
复制
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,您可以这样做

代码语言:javascript
复制
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的浅层副本,如下所示

代码语言:javascript
复制
const { one, two } = input;
const { ...data }: Input & Data = input;
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50593562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档