안녕하세요. 강의가 잘린 상태로 업로드가 돼서 죄송합니다. 제가 이전에 편집 전 영상이 컴퓨터에 남아있지 않아서 새로운 영상으로 올리는데 어려움이 있습니다. 아마 영상 마지막에 "RecyclerView에다가 데이터를 공급해줘야 하는데" 로 끝났는데 흐름상 데이터를 공급해서 렌더링한다고만 정리해주셔도 될 것 같습니다. 결국 이 강의에서 전달하고 싶었던 건 "이미 렌더링 된 것이 잠깐 화면에 안 보였다가 보이면 다시 렌더링하는 게 아니라 이전 렌더링하기 위해 캐시에 저장했다가 렌더링한다" 입니다.
안녕하세요 답변이 늦었습니다. 제가 질문 의도를 이해를 못했는데 그냥 질문 그대로 답변을 드리자면 https://www.typescriptlang.org/play/?#code/MYewdgzgLgBAJgIwFwwN4wNoAcTQJJwoAKuUBAusaQNyYCuEApgE4EoCqTrclMnLtAL4wAvGkHUgA 이런 타입스크립트 플레이그라운드에서 타입이 맞냐 아니냐를 확인가능합니다. 그리고 굳이 타입에러를 없애겠다고 하면 type PostId = `post_${string}`; type UserId = `user_${string}`; type Post = { title: string; content: string; }; type User = { name: string; email: string; }; const db: { [postId: PostId]: Post; [userId: UserId]: User } = {}; // 사용 예시 db["post_1"] = { title: "Hello", content: "World" }; db["user_1"] = { name: "Kim", email: "kim@example.com" }; 이렇게 하면 되지 않을까 싶습니다.
안녕하세요. 우선 제가 생각한 답안을 보여드리면 type SingleValue = Date | null type RangeValue = [SingleValue, SingleValue] type DatePicker = | { type: 'single'; value: SingleValue } | { type: 'range'; value: RangeValue }; class DatePickerKlass { picker: DatePicker; constructor(picker: DatePicker) { this.picker = picker; } updateValue(date: Date) { if (this.picker.type === 'single') { this.picker.value = date; } else if (this.picker.type === 'range') { this.picker.value = [date, null]; } } } 작성해주신 답안 보다 좀 더 간단하게 만들 수 있지 않을까 해서 저 같은 경우엔 discriminated union 으로 문제 풀어봤습니다. updateValue(date:Date) { const isSingle = ():this is DatePicker => this.type === 'single' if(isSingle()) { this.value = date return; } } 여기서 타입이 좁혀지지 않는 이유는 타입스크립트의 특성인데요. T에 타입을 제한해도 결국 T는 'placeholder'이기 때문에 특정 타입으로 좁혀지지 않습니다. 저도 실무에서 사용하다보면, 생각대로 안되는 게 참 많은데 이럴 땐 "아! 이건 아직 타입스크립트 개발하시는 분이 구현을 안해놨구나..." 라고 생각합니다. 버전이 높아지면 이런 문제도 해결되는 경우가 있거든요. 타입스크립트가 다른 statically-typed 언어에 비해 굉장히 자유도가 높은데, 그만큼 아직 구현이 안된 것이 종종 있습니다.