타입 매개변수로 확장되는 타입 별칭은 인스턴스화할 수 없음

타입 매개변수로 확장되는 타입 별칭은 인스턴스화할 수 없음 (instantiate_type_alias_expands_to_type_parameter)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 instantiate_type_alias_expands_to_type_parameter 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 간단히 말하면, 타입 매개변수(type parameter) 하나로 확장되는 타입 별칭(type alias)을 인스턴스화하려 할 때 분석기가 이 진단을 알려 줘요. 왜 안 되는지 살펴볼게요.

출처: instantiate_type_alias_expands_to_type_parameter

본문

진단 메시지

Type aliases that expand to a type parameter can't be instantiated.

타입 매개변수로 확장되는 타입 별칭은 인스턴스화할 수 없어요.

설명

분석기는 인스턴스화하려는 타입이 타입 별칭의 타입 매개변수 중 하나로 확장되는 타입 별칭인데 생성자 호출이 발견되면 이 진단을 만들어 내요. 이 경우는 허용되지 않아요. 타입 매개변수의 값은 클래스가 아니라 한낱 타입이기 때문이에요.

예시

다음 코드는 A가 타입 매개변수 하나와 동일하게 정의된 타입 별칭인데도 A<int>()로 인스턴스를 만들려고 하기 때문에 이 진단을 만들어 내요.

typedef A<T> = T;

void f() {
  const A<int>();
}

일반적인 해결 방법

타입 매개변수로 정의된 타입 별칭 대신, 클래스 이름이나 클래스로 정의된 타입 별칭을 사용하면 돼요.

typedef A<T> = C<T>;

void f() {
  const A<int>();
}

class C<T> {
  const C();
}

더 알아보기