개인과제를 vercel로 배포까지 마치며, 선택 구현 사항에
sort()를 사용해 나라를 나열하는 걸 구현해보라길래 한 번 구현을 해보려고 과제를 다시 열었다.
처음에는 CountryCard.tsx를 건드려야 하나 생각했지만
생각해 보니 화면에 나라에 대한 정보를 렌더링 시켜주는 곳은 CountryList.tsx에서 useEffect를 사용해서 해주고 있었기에 해당 부분을 건드리면 되는 거 같음

setCountries(data); 로 해당 데이터들을 불러오기 전에 정렬을 해준 후에 불러오면 되지 않을까? 싶어서 코드를 수정해봤음

sort(), localeCompare()로 나라 이름을 알파벳순으로 정렬해줬음. 코드를 수정할 땐 localeCompare()를 사용했는데 이 메서드에 대해서 간략하게나마 설명을 적어보자면
localeCompare 메서드는 참조 문자열이 정렬 순서에서 앞 또는 뒤에 오는지 또는 주어진 문자열과 같은지를 숫자로 반환시킴
function hello(): never {
throw new Error("aaa");
}
이렇게 return 시키지 않고 오류를 발생시키는 함수를 작성하거나, 타입이 두 가지 일 수도 있는 상황에 발생할 수 있음
function hello(name: string | number) {
if(typeof name === "string") {
name // 여기에서의 name은 string 타입
} else if (typeof name === "number") {
name // 여기에서의 name은 number 타입
} else {
name // 여기에서의 name은 뭘 쓰든 never 타입
}
}
위 코드에서 볼 수 있듯이 마지막 else에서의 name은 never 타입이기 때문에 만약 타입이 올바르게 들어온다면 저 코드는 작동하지 않음
그 위에 typeof name === "string" 혹은
typeof name === "number" 에서의 코드는 잘 작동함

함수 위에 마우스를 올렸을 시 보게 되는 것들을 말함
내가 함수를 어떻게 호출해야 하는지 알려주고, 함수의 반환 타입도 알려줌. 이게 signature 라는 것만 기억하면 됨
이제 나만의 call signatures를 어떻게 선언할지 알아보겠음
type Add = (a: number, b: number) => number;
const add: Add = (a, b) => a + b
이렇게 하면 TypeScript한테 일일이 타입이 number라고 말해줄 필요가 없음 TypeScript는 add의 타입을 알기 때문.
즉, TypeScript가 유추할 수 있게 된 것이고 내가 함수를 구현하기도 전에 타입을 만들고 함수가 어떻게 작동하는지 서술해둘 수 있다는 말이 됨
이 call signatures 방식을 많이 사용하게 될 것임
현재 나는 React.js로 코드를 작성하고 있는데
props로 함수를 보내게 되면, 어떻게 함수가 작동하는지, 함수의 return 값이 무엇인지 TypeScript한테 설명을 해줘야 함
function overloading, method overloading 라고도 불림
다른 사람이 만들어 놓은 외부 라이브러리 및 패키지 같은 건 대부분 overloading을 엄청 많이 사용함
📖 함수 오버로딩을 위해 해야할 것 2가지