Установка приоритетов свойства при объединении объектов

В Typescript я узнал, что вы можете сделать следующее:

// Configuration interface, all properties are optional, the user can specify them but does not need to
interface IConfig {
    foo?: string;
    bar?: string;
}

// properties which are not specified by the user should take their default value defined here
let defaultConfig: IConfig = {
    foo: "default",
    bar: "value"
};

// if the user only specifies foo...
let userSpecifiedConfig: IConfig = {
    foo: "custom"
};

// let's create the final full config
// thought, it would be a good idea to use destructuring operator for that:

let wrongFinalConfig: IConfig = {
    ...userSpecifiedConfig,
    ...defaultConfig
}; // => not what we want: { foo: "default", bar: "value" }

let correctFinalConfig: IConfig = {
    ...defaultConfig,
    ...userSpecifiedConfig
}; // => this results in what we want, foo is overriden by user-config, bar has the default value: { foo: "custom", bar: "value" }

Кажется, что ранее установленные свойства всегда перезаписываются последующими установленными свойствами, поэтому свойства, установленные в userSpecifiedConfig победить defaultConfig в случае correctFinalConfig, Если они не определены пользователем, все равно будут значения из defaultConfig,

Это поведение определено или я не должен полагаться на этот порядок деструктуризации? В последнем случае, что было бы самым чистым решением переопределить неизвестный набор дополнительных свойств из конфигурации по умолчанию?

0 ответов

Другие вопросы по тегам