"string, number, boolean은 익숙해 보여도 JavaScript의 실제 실행 규칙까지 알아야 안전하게 쓸 수 있어."
문자열과 UTF-16
TypeScript의 string은 JavaScript 문자열이야. 작은따옴표, 큰따옴표, 템플릿 리터럴을 모두 쓸 수 있고 별도의 char 타입은 없어. 문자열의 길이와 인덱스는 Unicode 문자가 아니라 UTF-16 코드 단위를 세기 때문에 '😀'.length는 2야. 사용자에게 보이는 문자 단위로 순회하려면 [...str]이나 Array.from(str)처럼 코드 포인트를 인식하는 방법을 써.
number는 한 가지 부동소수점 타입이야
정수와 실수를 나누는 별도 숫자 타입은 없고 모두 IEEE 754 배정밀도 부동소수점인 number야. 그래서 0.1 + 0.2 같은 계산에는 반올림 오차가 생길 수 있어. 정수를 정확히 표현할 수 있는 범위는 -(2 ** 53 - 1)부터 2 ** 53 - 1까지이며 경계는 Number.MAX_SAFE_INTEGER로 확인해. 그보다 큰 정수가 필요하면 bigint를 써.
boolean과 참·거짓 변환
boolean은 true와 false만 받아. 조건문에서는 0, 빈 문자열, null, undefined, NaN이 거짓으로 취급되고 나머지 대부분은 참이지만, 그 실행 규칙이 변수의 정적 타입을 자동으로 boolean으로 바꾸지는 않아. 진짜 boolean 값이 필요하면 Boolean(value)나 !!value로 명시적으로 변환해.
원시 타입 표기는 간단하지만 실행 의미는 JavaScript가 정해. 문자열의 UTF-16 단위, number의 정밀도, boolean 문맥의 falsy 규칙을 함께 기억해.
피파의 고백
타입 이름 세 개는 하루면 외워도 실행 규칙은 버그가 난 뒤에야 몸에 남기 쉬워. 이모지 길이와 안전한 정수 경계처럼 짧은 예제를 직접 실행해 보는 편이 가장 빨라.