typescript/no-extraneous-class 의심스러움
어떤 기능을 수행하나요?
이 규칙은 정적 멤버가 없는 클래스(예: 단지 정적 네임스페이스로만 사용되는 클래스)를 보고합니다. 또한 필드가 없고 생성자만 있는 클래스도 보고합니다. 이러한 클래스는 일반적으로 별도의 함수로 대체할 수 있습니다.
왜 문제가 되나요?
객체 지향 프로그래밍 패러다임에서 온 사용자는 유틸리티 함수를 모듈의 최상위 레벨에 두는 대신, 추가적인 클래스로 감싸는 경우가 있습니다. 이는 자바스크립트 및 타입스크립트 프로젝트에서는 일반적으로 불필요합니다.
- 래퍼 클래스는 구조적 개선 없이 코드에 추가적인 인지적 복잡성을 더합니다.
- 함수와 같은 것이 클래스 내부에 들어가더라도, 이미 모듈 내에 존재함으로써 자연스럽게 구성되어 있습니다.
- 대안으로,
import * as ...문법을 사용하여 하나의 객체 안에 모든 내용을 가져올 수 있습니다.
- 타이핑을 시작했을 때, 정적 클래스 또는 네임스페이스로 임포트한 속성에 대한 추천을 개발 환경 도구가 덜 잘 제공합니다.
- 변수 사용 여부 등을 정적 분석하기가 어렵습니다. 특히 모든 것이 클래스에 포함된 경우 (참고: 타입스크립트에서 죽은 코드(또는 죽은 타입) 찾기).
이 규칙은 또한 필드가 없고 생성자만 있는 클래스를 보고합니다. 이러한 클래스는 일반적으로 별도의 함수로 대체할 수 있습니다.
예시
이 규칙에 잘못된 코드 예시:
ts
class StaticConstants {
static readonly version = 42;
static isProduction() {
return process.env.NODE_ENV === "production";
}
}
class HelloWorldLogger {
constructor() {
console.log("Hello, world!");
}
}
abstract class Foo {}이 규칙에 올바른 코드 예시:
ts
const version = 42;
const isProduction = () => process.env.NODE_ENV === "production";구성
이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.
allowConstructorOnly
type: boolean
기본값: false
생성자만 있는 클래스를 허용합니다.
allowEmpty
type: boolean
기본값: false
빈 클래스를 허용합니다.
allowStaticOnly
type: boolean
기본값: false
정적 멤버만 있는 클래스를 허용합니다.
allowWithDecorator
type: boolean
기본값: false
데코레이터가 있는 클래스를 허용합니다.
사용 방법
이 규칙을 설정 파일이나 명령줄 인터페이스에서 활성화하기 위해 다음과 같이 사용할 수 있습니다:
json
{
"rules": {
"typescript/no-extraneous-class": "error"
}
}bash
oxlint --deny typescript/no-extraneous-class