Skip to content
← Back to rules

import/namespace 정확성

작동 방식

전체 네임스페이스로 가져올 때 (예: import * as foo from './foo'; foo.bar();) 참조되는 이름이 존재하는지 확인합니다. (./foo에서 bar가 내보내지지 않은 경우 foo.bar()는 오류를 보고합니다). 내보내진 이름이 없을 경우, 가져오기 선언 위치에서 오류를 보고합니다. 또한 계산된 참조(예: foo["bar"]())에도 오류를 보고합니다. 가져온 네임스페이스의 멤버에 대한 할당도 오류로 표시합니다.

왜 좋지 않은가?

존재하지 않는 이름을 참조하면 런타임 오류와 코드의 예기치 못한 동작을 유발할 수 있습니다. 유효한 이름이 무엇인지 명확하지 않기 때문에 코드의 신뢰성과 유지보수성이 떨어집니다. 이 규칙은 모든 참조된 이름이 정의되어 있음을 보장하여 코드의 명확성과 강건성을 높입니다.

예시

다음과 같은 파일이 있다고 가정합니다.

javascript
// ./foo.js
export const bar = "I'm bar";

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

javascript
// ./qux.js
import * as foo from "./foo";
foo.notExported(); // 오류: notExported는 내보내지지 않았습니다

// 가져온 네임스페이스의 멤버에 할당
foo.bar = "new value"; // 오류: bar는 재할당할 수 없습니다

// 존재하지 않는 내보내기에 대한 계산된 참조
const method = "notExported";
foo[method](); // 오류: notExported는 존재하지 않습니다

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

javascript
// ./baz.js
import * as foo from "./foo";
console.log(foo.bar); // 유효: bar는 내보내졌습니다

// 계산된 참조
const method = "bar";
foo[method](); // 유효: method는 내보낸 함수를 가리킵니다

구성

이 규칙은 다음 속성을 가지는 구성 객체를 받습니다.

allowComputed

type: boolean

기본값: false

가져온 네임스페이스에 대한 계산된 참조를 허용할지 여부.

사용 방법

구성 파일이나 명령줄 인터페이스를 통해 이 규칙을 활성화하려면 다음을 사용하세요:

json
{
  "plugins": ["import"],
  "rules": {
    "import/namespace": "error"
  }
}
bash
oxlint --deny import/namespace --import-plugin

참고 자료