JS

· 개발
정적 타입 언어의 타입 시스템정적 타입 언어의 타입 시스템은 크게 두 가지 방식이 있다.명목적 타이핑. (혹은 이름 기반 타입 시스템): '이름, 단위'를 비교한다. 정밀한 타입 체크로 에러 방지. 유연성, 호환성이 부족하다.구조적 타이핑. (혹은 덕 타이핑): '속성, 구조'를 비교한다. 타입 체크가 허술하지만, 그래서 유연한 사용이 가능하다.// 명목적 타이핑 (Java 스타일)class Person { name: string; }class Animal { name: string; }// Java에서는 Person과 Animal이 같은 구조여도 호환되지 않음// 구조적 타이핑 (TypeScript)type Person = { name: string; }type Animal = { name: strin..
· 개발
Type Guard란?Type Guard는 런타임에서 특정 값의 타입을 검증하여 TypeScript 컴파일러가 해당 스코프 내에서 더 구체적인 타입으로 추론할 수 있도록 도와주는 함수다. 이는 TypeScript의 타입 시스템과 JavaScript의 런타임 동작을 연결하는 핵심적인 기능이다. 타입 서술어Type Guard의 핵심은 타입 서술어(Type Predicate)다. 이는 함수의 반환 타입을 parameter is Type 형태로 정의하는 것이다.function isDeviceStatusString(value: string): value is DeviceStatusString { return Object.keys(DeviceStatus).includes(value);} 여기서 value is D..
· 개발
유니언 열거형과 열거형 멤버 타입계산되지 않는 상수 열거 멤버의 특수한 부분 집합이 있다. 리터럴 열거형 멤버 리터럴 열거형 멤버는 초기화 값이 존재하지 않거나, 아래 값들로 초기화되는 멤버다.문자 리터럴 (예시. "foo", "bar, "baz")숫자 리터럴 (예시. 1, 100)숫자 리터럴에 단항 연산자 - 가 적용된 경우 (e.g. -1, -100) 열거형의 모든 멤버가 리터럴 열거형 값을 가지면 특별한 의미로 쓰이게 된다. 첫째로 열거형 멤버를 타입처럼 사용할 수 있다. 예를 들어 특정 멤버는 오직 열거형 멤버의 값만 가지게 할 수 있다.enum ShapeKind { Circle, Square,}interface Circle { kind: ShapeKind.Circle; ra..
· 개발
클로저는 주변 상태에 대한 참조와 함께 묶인 함수의 조합이다. 즉, 클로저는 내부 함수에서 외부 함수의 범위에 대한 접근을 제공한다. JavaScript에서 클로저는 함수 생성 시 함수가 생성될 때마다 생성된다.function init() { var name = "Mozilla"; // name은 init에 의해 생성된 지역 변수이다. function displayName() { // displayName() 은 내부 함수이며, 클로저다. console.log(name); // 부모 함수에서 선언된 변수를 사용한다. } displayName();}init(); init()은 지역 변수 name과 함수 displayName()을 생성한다. displayName()은 init() 안에 정의..
belljun
'JS' 태그의 글 목록