type_parameter_referenced_by_static: 정적 멤버는 클래스 타입 매개변수를 참조할 수 없어요

type_parameter_referenced_by_static: 정적 멤버는 클래스 타입 매개변수를 참조할 수 없어요

분석기가 내보내는 진단에는 이름이 있어요. type_parameter_referenced_by_static정적(static) 멤버가 클래스의 타입 매개변수를 참조할 때 알려주는 진단이에요. 원문의 요지는 "정적 멤버는 클래스의 타입 매개변수를 참조할 수 없다"는 거예요.

출처: type_parameter_referenced_by_static

본문

설명

분석기는 정적 멤버가 클래스에 선언된 타입 매개변수를 참조할 때 이 진단을 만들어요. 타입 매개변수는 클래스의 인스턴스에 대해서만 의미가 있어요. 정적 멤버는 인스턴스 없이도 동작해야 하니까, 인스턴스별로 달라지는 타입 매개변수를 참조할 수 없는 거죠.

예시

다음 코드는 정적 메서드 hasType이 타입 매개변수 T를 참조하고 있어서 이 진단을 만들어요.

class C<T> {
  static bool hasType(Object o) => o is T;
}

흔한 해결 방법

멤버가 인스턴스 멤버가 될 수 있다면, 키워드 static을 제거해요.

class C<T> {
  bool hasType(Object o) => o is T;
}

멤버가 반드시 정적 멤버여야 한다면, 그 멤버를 제네릭으로 만들어요.

class C<T> {
  static bool hasType<S>(Object o) => o is S;
}

다만 여기서 주의할 점이 있어요. TS 사이에는 아무 관계가 없기 때문에, 두 번째 방법은 처음 의도했던 의미와 달라질 수 있어요.