[TS] 제네릭
TIL
제네릭(Generic) 이란 함수나 인터페이스, 타입 별칭, 클래스 등을 다양한 타입과 함께 동작하도록 만들어주는 타입스크립트의 기능이다.제네릭이 필요한 상황any 타입의 문제다음과 같이 매개변수 타입을 any로 정의하면 함수 호출 결과가 모두 any 타입으로 추론된다.function func(value: any) { return value;}let num = func(10);let str = func("string");num.toUpperCase(); // ❌ 런타임 오류 발생num에는 Number타입의 값 10이 저장되어 있다. 그러나 any 타입으로 추론되었기 때문에 toUpperCase같은 String타입 전용 메서드를 사용해도 타입스크립트가 오류를 감지하지 못한다.이 코드는 실제로 실행하면 런..
타입스크립트 타입 시스템: 계층과 호환성
Frontend
타입스크립트의 타입은 값들의 집합으로 이해할 수 있다.타입 계층도타입스크립트의 모든 타입은 계층 구조를 이루고 있다.최상위에는 unknown 타입(전체 집합)이 있고, 최하위에는 never타입(공집합)이 있으며, 그 사이에 다양한 타입들이 위치한다. 슈퍼타입과 서브타입슈퍼타입(부모 타입): 더 넓은 범위의 값을 포함하는 타입서브타입(자식 타입): 더 좁은 범위의 값을 포함하는 타입예를 들어,number 타입은 모든 숫자 값을 포함하고 20이라는 number 리터럴 타입은 오직 20만 포함한다. 따라서 number 리터럴 타입은 number 타입의 부분집합(서브타입)이다. 타입 호환성타입 호환성이란 A 타입의 값을 B 타입으로 취급해도 괜찮은지 판단하는 것이다. 업캐스팅 (Up Cast)서브타입의 값을 슈..
[TS] any와 unknown
TIL
any 타입타입스크립트에서만 제공되는 특별한 타입으로 타입 검사를 받지 않는다. 다음과 같이 변수 anyVar를 number 타입의 값 10으로 초기화 한 후, string 타입의 값 "hello"를 저장하면 오류가 발생한다.타입스크립트에서는 변수를 초기화할 때 초기화하는 값을 기준으로 변수의 타입을 추론하기 때문이다. 이 경우 any타입을 명시해주면 어떤 타입의 값이든 자유롭게 할당할 수 있다.let anyVar: any = 10;anyVar = "hello"; // ✅ 정상anyVar = true; // ✅ 정상anyVar = {}; // ✅ 정상anyVar = () => {}; // ✅ 정상anyVar.toUpperCase(); // ✅ 컴..