Вы можете ввести деструктуру как пересечение 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;