Установка приоритетов свойства при объединении объектов
В 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
,
Это поведение определено или я не должен полагаться на этот порядок деструктуризации? В последнем случае, что было бы самым чистым решением переопределить неизвестный набор дополнительных свойств из конфигурации по умолчанию?