[ERR] Assignment to property of function parameter '??’
ERR
Assignment to property of function parameter '???'
WHEN
- todo 웹 페이지를 만들면서 문자열 배열이였던 데이터를 완료여부와 컨텐츠를 가진 객체 배열로 변경했다.
todoList : string[] = ['todo1', 'todo2', ...]
todoList : { done: boolean; content: string }[] = [
{
done: false,
content: 'todo1',
},
{
done: true,
content: 'todo2',
},
];
- 완료된 todo의 boolean 값을 아래와 같이 바꾸면서 에러가 발생했다.
const completeTodo = () => {
todoList[idx].done = true
}
WHY
- ESLint 오류였으며, https://eslint.org/docs/rules/no-param-reassign 를 참조했다.
- 간단히 정리하자면 매개변수에 지정된 변수를 수정하는 경우 함수에 포함된
arguments
객체도 변경되기 때문이라고 한다.
- 매개변수가 참조형인 경우 인자와 같은 주소를 가지고 있기 때문에 원본을 직접 변경하기 때문이다.
- ESLint 룰에는
‘함수 매개변수로 선언된 변수에 대한 할당은 오해의 소지가 있고 혼란스러운 동작을 유발할 수 있습니다’
라고 한다.
SOLVE
const completeTodo = () => {
Object.assign(todoList[idx], { done: true });
}
- 위 방법외에도 아래와 같이 해결하는 방법도 존재한다.
const completeTodo = () => {
const todo = todoList[idx];
todo.done = true;
}