타입 어노테이션을 명시해요
타입 어노테이션을 명시해요
top-level 선언이나 클래스 멤버는 슈퍼 인터페이스나 초기화식에서 타입을 추론할 수 없는 경우가 있어요. 그럴 때 타입을 빼먹으면 조용히 dynamic으로 처리되니, 타입을 명시해 주는 게 안전합니다.
본문
슈퍼 인터페이스나 초기화식에서 타입이 추론되지 않는 top-level 및 클래스형 멤버 선언에는 타입을 명시하세요.
이 린트는 top-level 선언이나 클래스형 네임스페이스 수준 선언(static·instance 멤버 또는 생성자 선언)에서 빠뜨린 모든 반환 타입, 매개변수 타입, 변수 타입 중에서 추론으로 타입이 정해지지 않아 결과적으로 dynamic으로 기본 설정되는 경우를 경고해요.
top-level 추론으로 타입이 정해질 수 있는 생략 타입은 오직 초기화식을 가진 변수 선언의 타입과, 일관된 결합 슈퍼 인터페이스 시그니처를 오버라이드하는 instance 멤버의 반환·매개변수 타입뿐이에요.
Setter는 항상 void로 간주되므로 반환 타입이 필요 없어요.
나쁜 예:
var _zeroPointCache;
class Point {
get zero => ...;
final x, y;
Point(x, y) {}
closest(b, c) => distance(b) <= distance(c) ? b : c;
distance(other) => ...;
}
_sq(v) => v * v;
좋은 예:
Point? _zeroPointCache;
class Point {
Point get zero => ...;
final int x, y;
Point(int x, int y) {}
closest(Point b, Point c) =>
distance(b) <= distance(c) ? b : c;
distance(Point other) => ...;
}
int _sq(int v) => v * v;
활성화 방법
strict_top_level_inference 규칙을 사용하려면 analysis_options.yaml 파일의 linter > rules 아래에 strict_top_level_inference를 추가하면 돼요:
linter:
rules:
- strict_top_level_inference
린트 규칙을 YAML 맵 문법으로 설정한다면, linter > rules 아래에 strict_top_level_inference: true를 추가하면 되고요:
linter:
rules:
strict_top_level_inference: true
더 알아보기
- Dart linter rules — 다른 린트 규칙들 살펴보기