할당가능(assignable) 두 가지 다른 타입 A와 B에 대해, 모든 A 타입의 값을 B 타입의 값으로도 취급할 수 있는가? type OneDigitOdd = 1 | 3 | 5 | 7 | 9; const three: OneDigitOdd = 3; const num: number = three; number 타입의 값에 OneDigitOdd 타입의 값을 할당한다. OneDigitOdd 타입이 가질 수 있는 값인 1, 3, 5, 7, 9 는 모두 number 에 속한다. OneDigitOdd 타입의 모든 값이 number 타입의 값이므로 위의 코드는 오류 없이 실행 된다. 즉, OneDigitOdd 타입은 number 타입에 할당 가능(assignable)하다. const four: number = 4;..
인터페이스(interface) 인터페이스를 통해 값이 따라야 할 제약을 타입으로 표현 한다. 값이 어떤 멤버를 가져야 하고 각 멤버의 타입은 어때야 하는지 서술할 수 있다. interface x { a: string; b: number; } 인터페이스의 속성을 읽기 전용 또는 선택 속성으로 정의할 수 있다. interface x { a: string; readonly b: number; //읽기전용 c?: string; //선택 } const y: x = { a: 'ab', b: 11 }; y.b = 22; // error TS2540: Cannot assign to 'b' because it is a constant or a read-only property. 함수 인터페이스 인터페이스를 이용해 함수 ..
제너릭(generic) 여러 타입에 대해 동일한 규칙을 갖고 동작하는 타입 정의할 수 있다. 해당 함수를 정의할 때는 알 수 없고 사용할 때에만 알 수 있는 타입 타입 변수 함수를 호출하는 시점이 되어야만 알 수 있는 값을 함수 내부에서 사용하기 위해서는 그 값을 담아둘 매개변수가 필요하다. 마찬가지로, 요소를 사용하는 시점에서만 알 수 있는 타입을 담아두기 위해서는 타입 변수(type variable)가 필요하다. 타입 변수와 타입의 관계는 매개변수와 인자 값의 관계와 비슷하다. 타입 변수와 제너릭의 핵심은 여러 타입에 대해 동작하는 요소를 정의하되, 해당 요소를 사용할 때가 되어야 알 수 있는 타입 정보를 정의에 사용하는 것이다. 함수 제너릭 정의 시점 매개변수 a: number 타입 변수 정의 예시..
객체 중괄호{ }로 객체 타입(object type)을 선언한다. const o: { a: string; b: number; } = { a: 'ab', b: 2}; 콜론(:)의 우변에는 값 대신 해당 속성의 타입이 들어간다. 구분자로 콤마(,) 뿐만 아니라 세미콜론(;)을 사용할 수 있다. 선택 속성 속성명 뒤에 물음표(?)를 붙여 해당 속성이 존재하지 않을 수도 있음을 표현할 수 있다. const o: { a: string; b?: number; } = { a: 'ab' }; 읽기 전용 속성 속성명 앞에 readonly 키워드를 붙여 해당 속성의 재할당을 막을 수 있다. const user: { readonly a: string; b: number; } = { a: 'ab', b: 2 }; user.n..
typescript 정적 타입 시스템(static type system)을 도입한 자바스크립트 정적 타입 언어(statically typed language)에서는 프로그램의 예상 동작을 타입을 통해 나타내고, 그 예상에 맞게 동작할 지의 여부를 타입 검사기(type checker)를 통해 실행 전에 확인할 수 있다. 다음과 같이 타입스크립트는 컴파일러에 의해 자바스크립트 코드로 컴파일된다. 타입스크립트 type Language = 'TypeScript' | 'JavaScript' | 'Python' | 'Rust' | 'Haskell'; interface Person { favoriteLanguages: Array; } function preferTypeScript(person: Person): boo..