as<aside>
โ๐ป linkedList๋ฅผ, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ถ์ด์, ๊ผญย Movieย ํ์
๋ฟ๋ง ์๋๋ผ ์ด๋ค object๋ ๋ด์ ์ ์๊ฒ ๋ง๋ค์๋ค.
๊ทธ๋ฌ๋ค ๋ณด๋,ย MovieRankย ์์์ย linkedListย ๊ด๋ จ ๋ก์ง์ ์ธ ๋๋, type์ ๋ณํ(as keyword)ํด์ค์ผ ํ๋ ๊ท์ฐฎ์์ด ์์๋ค.
</aside>
update: (title: string, tikets: number, startNode = headNode) => {
// list๋ฅผ mapํ ๋, ํน์ title์ ๊ฐ์ง movie์ tikets๋ฅผ ์
๋ฐ์ดํธ
const updateTikets = (value: object | null) => {
if (value === null) return null;
const movie = value as Movie;
if (movie.title === title) {
movie.tikets = tikets;
return movie as object;
}
return value;
};
const moviesList = listValues(
mapList(startNode, updateTikets)
) as Movie[];
return createMovieRank(moviesList);
},
mapList()ย ํจ์๋ย linkedListย ๊ด๋ จ ํจ์๋ก, ์ข ๋ ์ผ๋ฐ์ ์ธย object๋ฅผ ๋ฐ๋๋ค.๊ทธ ์์ย
Movie๊ฐ ๋ค์ด๊ฐ ๊ฒ์ ๋๋ ์์ง๋ง, typeScript๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์,ยupdateTikets๋ผ๋ ์ฝ๋ฐฑ ํจ์ ์์์,ยmovie **as** object์ผ๋ก ํ์ ์ ๋ฐ๊ฟ์ค์ผ ํ๋ค.
<T>์๊ฐํด๋ณด๋, TypeScript์๋ ์ด๋ด ๋๋ฅผ ์ํดย generic์ด ์์๋ค. ์ด์ ๋ํด ๋ ํ์ตํด๋ดค๋ค.
์ฐ์ , ํ์ ์ ์ด๋ฐ ์์ผ๋ก ๋ฐ๊ฟ ์ ์์๋ค.
type ListNode<T> = {
value: T | null;
next: ListNode<T> | null;
};
const createNode = <T>(value: T | null): ListNode<T> => {
return {
value: value,
next: null,
};
};
์ด์ ย update()๋ ๋ค์๊ณผ ๊ฐ์์ง๋ค.
const update = (
title: string,
tikets: number,
startNode: ListNode<Movie>
) => {
// list๋ฅผ mapํ ๋, ํน์ title์ ๊ฐ์ง movie์ tikets๋ฅผ ์
๋ฐ์ดํธ
const updateTikets = (value: Movie | null): Movie | null => {
if (value === null) return null;
if (value.title === title) {
value.tikets = tikets;
return value;
}
return value;
};
const updatedList = mapList(startNode, updateTikets);
const moviesList = listValues(updatedList);
return createMovieRank(moviesList); // Assuming createMovieRank is defined elsewhere
};
Type Assertion์ ํด์ฃผ์ง ์์๋ ๋๋ค!
https://www.typescriptlang.org/docs/handbook/2/generics.html