yield로 내놓는 값의 타입이 맞지 않아요
yield로 내놓는 값의 타입이 맞지 않아요
생성기 함수(sync*나 async*로 표시된 함수)는 Iterable이나 Stream을 반환하는데요, yield로 내놓는 값의 타입과 그 생성기가 반환하기로 한 타입이 서로 맞아야 해요. 만약 타입이 안 맞으면 분석기가 이 진단을 내보내요. yield*로 다른 컬렉션을 펼칠 때도 그 값들의 타입이 반환 타입에 맞아야 하구요.
출처: A yielded value of type '{0}' must be assignable to '{1}'
본문
분석기는 yield 또는 yield* 표현식이 만들어내는 객체의 타입이, 생성기(즉 sync*나 async* 중 하나로 표시된 함수나 메서드)가 반환하는 Iterable 또는 Stream 타입에서 돌려줘야 하는 객체들의 타입과 일치하지 않을 때 이 진단을 만들어요.
예시
아래 코드는 getter zero가 정수를 반환하는 Iterable을 반환하도록 선언됐는데, yield가 iterable에서 문자열을 반환하고 있어서 이 진단이 발생해요.
Iterable<int> get zero sync* {
yield '0';
}
흔한 해결 방법
함수의 반환 타입이 올바르다면, yield 키워드 뒤의 표현식을 올바른 타입을 반환하도록 고치면 돼요.
Iterable<int> get zero sync* {
yield 0;
}
반대로 yield 뒤의 표현식이 올바르다면, 함수의 반환 타입을 그 값을 허용하도록 바꿔 주면 돼요.
Iterable<String> get zero sync* {
yield '0';
}
더 알아보기
yield/yield*: Dart 언어 투어 — 생성기(Generators)Iterable/Stream타입과 생성기: Dart 언어 투어 — 비동기 지원(Asynchrony)- 관련 진단: yield_in_non_generator