Ошибка типизации свойства при объявлении [] | string[] или [] | Array в Vuex

Я объявил интерфейс:

export interface ApplicationState extends RootState {
  messages: [] | string[];
}

Я говорю, что моё свойство должно быть либо пустым массивом, либо массивом строк. Но в мутации я получаю ошибку:

[MutationTypes.APPEND_MESSAGES](state: ApplicationState, payload: string): void {
  state.messages.push(payload);
},

TS2345: Argument of type 'string' is not assignable to parameter of type 'never'.

Но если я убирая [] |, то всё ок. В чём я ошибаюсь или что не понимаю?

Окружение:

Typescript: 3.9.7


Ответы (1 шт):

Автор решения: ZiiMakc

Вы не можете делать push в тип [] который может быть только пустым массивом, отсюда и ошибка.

Обычно просто используют string[].

Если вам нужно напоминание о том что элемента массива может не быть, то попробуйте:

Array<string | undefined>

Или

;(state.messages as string[]).push(payload)

Или просто держите в голове, что state.messages[1] может быть undefined

→ Ссылка