Свойства / поля класса являются синтаксическими c сахар для кода тела конструктора и оцениваются в том же порядке, в котором они определены:
constructor() {
this.style = {
/* ... */
...this.themeStyle, // not defined
};
this.themeStyle /* = ... */;
}
Этот порядок также применяется к свойствам TypeScript, которые не инициализированы и не ' не существует во время выполнения. themeStyle
должен go до style
.
Проблема с этим фрагментом состоит в том, что он не соответствует Vue жизненному циклу. Значения реквизита недоступны при создании экземпляра класса времени, ожидается, что значение themeStyle
будет неопределенным.
style
должно быть либо вычисляемым свойством, чтобы реагировать на themeStyle
изменения:
get style() {
return {
// Reset
display: 'inline-block',
textDecoration: 'none',
outline: 'none',
// Theme
...this.themeStyle,
};
}
Или назначаться при наличии themeStyle
:
style!: object;
mounted() {
this.style = {
display: 'inline-block',
textDecoration: 'none',
outline: 'none',
...this.themeStyle,
};
}