invalid_type_argument_in_const_literal 진단: const 리터럴의 타입 인자에는 타입 파라미터를 쓸 수 없어요

invalid_type_argument_in_const_literal 진단: const 리터럴의 타입 인자에는 타입 파라미터를 쓸 수 없어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_type_argument_in_const_literalconst가 붙은 list, map, set 리터럴의 타입 인자에 타입 파라미터가 사용될 때 분석기가 알려주는 진단이에요. 컴파일 시점에 타입 파라미터의 실제 값을 알 수 없기 때문에 허용되지 않는 거죠.

출처: invalid_type_argument_in_const_literal

본문

설명

분석기는 const가 붙은 list, map, set 리터럴의 타입 인자에 타입 파라미터가 사용될 때 이 진단을 만들어요. 타입 파라미터의 값(런타임에 실제로 쓰일 타입)을 컴파일 시점에 알 수 없기 때문에 이렇게 쓰는 건 허용되지 않아요.

예시

다음 코드는 상수 list를 만들면서 타입 파라미터 T를 타입 인자로 쓰고 있기 때문에 이 진단이 나와요.

List<T> newList<T>() => const <T>[];

다음 코드는 상수 map을 만들면서 타입 파라미터 T를 타입 인자로 쓰고 있기 때문에 이 진단이 나와요.

Map<String, T> newSet<T>() => const <String, T>{};

다음 코드는 상수 set을 만들면서 타입 파라미터 T를 타입 인자로 쓰고 있기 때문에 이 진단이 나와요.

Set<T> newSet<T>() => const <T>{};

흔한 해결 방법

타입 파라미터에 쓰일 타입을 컴파일 시점에 알 수 있다면, 타입 파라미터를 제거해요.

List<int> newList() => const <int>[];

타입 파라미터에 쓰일 타입을 런타임까지 알 수 없다면, const 키워드를 제거해요.

List<T> newList<T>() => <T>[];

더 알아보기