Машинопись: Как набирать деструктуру остальных объектов - PullRequest
0 голосов
/ 30 мая 2018

Если у меня есть эти два объекта

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;

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете ввести деструктуру как пересечение 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, я могуне придумать ничего лучше, чем сделать две деструктуризации: одну без объекта «покой», а другую с ним.Если вы хотите, чтобы 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...