extension_as_expression 진단: 확장(extension)은 표현식으로 쓸 수 없어요

extension_as_expression 진단: 확장(extension)은 표현식으로 쓸 수 없어요

분석기가 내보내는 진단에는 이름이 있어요. extension_as_expression확장의 이름이 표현식 안에서 사용될 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 다만 확장 오버라이드(extension override)나 확장의 정적 멤버 접근을 한정(qualify)하는 경우는 예외예요.

출처: extension_as_expression

본문

설명

분석기는 확장의 이름이 표현식 안에서, 그것도 확장 오버라이드가 아니고 확장의 정적 멤버 접근을 한정하는 것도 아닌 위치에 쓰였을 때 이 진단을 만들어요. 클래스는 타입을 정의하기 때문에 클래스의 이름을 쓰면 그 클래스의 타입을 나타내는 Type 인스턴스를 가리킬 수 있어요. 그런데 확장은 타입을 정의하지 않아서, 타입 리터럴처럼 사용할 수 없어요.

예시

다음 코드는 E가 확장이기 때문에 이 진단을 만들어요.

extension E on int {
  static String m() => '';
}

var x = E;

흔한 해결 방법

확장의 이름을 참조할 수 있는 이름, 예를 들어 확장에 정의된 정적 멤버로 바꾸면 돼요.

extension E on int {
  static String m() => '';
}

var x = E.m();

더 알아보기