TypeScript 5.7의 Iterator Helper 타입 추론 개선
배경
데이터 파이프라인 처리 로직에서 Iterator Helper를 사용하는 코드가 많아졌는데, TypeScript 5.6까지는 체이닝 시 타입 추론이 제대로 되지 않아 as 키워드를 남발하고 있었다.
5.7로 업그레이드하면서 이 부분이 개선되었다는 릴리즈 노트를 보고 바로 적용했다.
변경 사항
기존 코드 (5.6)
const numbers = [1, 2, 3, 4, 5].values();
const result = numbers
.filter(n => n % 2 === 0)
.map(n => n * 2) as IterableIterator<number>; // 타입 단언 필요
for (const num of result) {
console.log(num); // 타입 추론 실패
}
개선된 코드 (5.7)
const numbers = [1, 2, 3, 4, 5].values();
const result = numbers
.filter(n => n % 2 === 0)
.map(n => n * 2); // 타입 자동 추론
for (const num of result) {
console.log(num); // num: number로 정확히 추론
}
flatMap 체이닝
특히 flatMap을 사용할 때 타입 추론이 제대로 되지 않아 문제가 많았는데, 이번 업데이트로 해결되었다.
interface User {
id: number;
tags: string[];
}
const users: User[] = [
{ id: 1, tags: ['typescript', 'react'] },
{ id: 2, tags: ['node', 'express'] }
];
const allTags = users.values()
.flatMap(user => user.tags.values())
.filter(tag => tag.length > 4)
.map(tag => tag.toUpperCase());
// allTags: IterableIterator<string> 정확히 추론됨
for (const tag of allTags) {
console.log(tag); // tag: string
}
성능 이슈
대용량 데이터 처리 시 Iterator Helper가 Array 메서드보다 메모리 효율이 좋아서 적극 활용하고 있다. 이제 타입 안정성까지 확보되어 프로덕션 코드에 더 자신있게 사용할 수 있게 되었다.
결론
TypeScript 5.7의 Iterator Helper 타입 추론 개선으로 코드베이스에서 약 50여 곳의 타입 단언을 제거했다. 컴파일 타임에 더 많은 에러를 잡을 수 있게 되어 만족스럽다.