Skip to content
← Back to rules

eslint/no-shadow Suspicious

무엇을 하는가

외부 스코프에서 선언된 변수를 동일한 이름의 로컬 변수가 가리키는 것을 금지합니다.

왜 좋지 않은가?

가리기(스로잉)란, 지역 변수가 포함된 스코프 내에 존재하는 변수와 동일한 이름을 갖는 경우를 의미합니다. 이는 어떤 변수가 참조되고 있는지 명확하지 않게 만들 수 있으며, 진단하기 어려운 버그로 이어질 수 있습니다.

예시

이 규칙에 잘못된 코드 예시:

js
var x = 1;
function foo() {
  var x = 2; // x는 외부의 x를 가리킴
}

이 규칙에 올바른 코드 예시:

js
var x = 1;
function foo() {
  var y = 2; // 다른 이름 사용, 가리기 없음
}

구성

이 규칙은 다음 속성을 가진 구성 객체를 수락합니다.

allow

type: string[]

default: []

가리기를 허용할 변수 이름 목록입니다.

builtinGlobals

type: boolean

default: false

내장 전역 변수의 가리기를 보고할지 여부.

hoist

type: "all" | "functions" | "functions-and-types" | "never" | "types"

default: "functions-and-types"

가리기 검사 시 호이스팅 처리 방식을 제어합니다.

"all"

호이스팅으로 인해 외부 변수가 선언되기 전에도 가리기를 보고합니다.

"functions"

함수 선언만 호이스팅되는 경우에만 가리기를 보고합니다.

"functions-and-types"

함수 및 타입 선언 모두 호이스팅되는 경우에 가리기를 보고합니다.

"never"

외부 변수가 선언되기 전에는 절대 가리기를 보고하지 않습니다.

"types"

타입 선언만 호이스팅되는 경우에만 가리기를 보고합니다.

ignoreFunctionTypeParameterNameValueShadow

type: boolean

default: true

true인 경우, 함수 타입 매개변수가 값에 대한 이름을 가리더라도 무시합니다.
예시: const T = 1; function foo<T>() {}

ignoreOnInitialization

type: boolean

default: false

가리키는 변수가 아직 초기화되지 않았다고 추정될 때, 변수 초기화 시점을 무시할지 여부.

ignoreTypeValueShadow

type: boolean

default: true

true인 경우, 타입과 값이 동일한 이름을 가질 때 무시합니다.
이는 타입스크립트에서 흔히 발생합니다: type Foo = ...; const Foo = ...;

사용 방법

구성 파일 또는 명령줄 인터페이스에서 이 규칙을 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "rules": {
    "no-shadow": "error"
  }
}
bash
oxlint --deny no-shadow

참고 자료