Ошибка типизации свойства при объявлении [] | 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