타입스크립트 기초 문법-기본타입

Cornflower blue·2022년 8월 26일
0

3.0 타입스크립트 기초 문법

타입 표기(Type Annotation)

타입스크립트 코드에서 어떤 변수 또는 값의 타입을 표기하기 위해 타입 표기를 사용한다. 타입 표기는 식별자 또는 값 뒤에 콜론(:)을 붙여 value: type의 형태로 표기한다.

const areYouCool: boolean = true;
const answer: number = 42;
const typescript: string = "great";
const greetings: string = `
	Hello, Readers!
	Welcome to TypeScript.
`;
const hasType: Object = {
	TypeScript: true,
  	JavaScript: false
};

예제 코드의 실행 환경

앞서 언급했듯, 기본 코드 베이스 이식의 용이성은 타입스크립트의 언어 디자인의 큰 목표 중 하나다. 그 목표를 달성하기 위한 핵심 장치가 바로 점진적 타이핑이다.

점진적 타이핑이란 말 그대로 점진적으로 타입 안정성을 키워가는 것을 허용하는 타입 시스템이다. 일단 프로그램의 일부에만 정적 타입 검사를 시행하고 나머지 부분은 추후 타입 정보를 추가하는 식의 접근이 가능한 것이다.

특별히 따로 언급하지 않는 한, 내가 보고 있는 책은 모든 예제 코드에서 --strict 컴파일러 플래그가 켜진 환경을 가정한다고 한다. 현재로서는 이 플래그가 켜진 환경에서 상대적으로 엄격한 타입 검사가 수행된다는 것을 인지하는 정보로 충분하다.

타입스크립트는 타입추론을 지원한다. 즉, 프로그래머가 명시적으로 타입 정보를 적지 않아도 컴파일러가 이미 알고 있는 정보와 주변 맥락을 기반으로 타입을 추론할 수 있다. 하지만 본 책의 예제 코드는 타입 추론에 최소한도로만 의존한다. 즉 추론할 수 있는 타입 정보도 명시적으로 적어주는 것을 선호한다.


3.1 기본타입

불리언

자바스크립트의 boolean에 대응하는 참 또는 거짓을 나타내는 타입이다.

const isTypeScriptAwesome: boolean = true;
const doesJavaScriptHasTypes: boolean = false;

숫자

숫자를 나타내는 타입이다. 자바스크립트에서는 정수, 부동 소수점 등의 구분이 따로 없고 무든 수가 IEEE754 표준을 따르는 부동소수점이고, 타입스크립트의 number 타입도 마찬가지다.

const yourScore: number = 100;
const ieee754IsAwesome: number = 0.1 + 0.2; // 0.30000000004

문자열

문자열을 나타내는 타입이다. ES6 템플릿 리터럴 역시 string 타입의 값이다.

const authorName: string = '안희종';
const toReaders: string = `
책을 읽어주셔서 감사합니다.
`;

null/undefined

null타입과 undefined 타입은 각각 null과 undefined라는 하나의 값만을 갖는다. 이 두 값을 자기 자신의 타입, 그리고 아래에서 언급될 void 타입 이외의 타입에 할당하려 하면 타입 에러가 발생한다.

const nullValue: null = null;
const undefinedValue: undefined = undefined;
const numberValue: number = null; // TS2322: Type 'null' is not assignable to type 'number'

특별한 타입

자바스크립트에서 직접적으로 대응되는 값은 없지만 타입스크립트가 제공하는 특수한 타입이 몇 가지 있다.

any

any 타입은 모든 타입과 호환 가능하다. 즉, 모든 값의 타입을 any로 지정할 수 있고, any 타입의 변수에는 모든 값을 할당할 수 있다.

let bool: any = true;
bool = 3;
bool = 'whatEver';
bool = {};

any 타입은 타입스크립트 타입 시스템의 비상 탈출구 역할이다. any는 타입 정의를 제공하지 않는 라이브러리, 일단 무시하고 넘어가고 이후에 정확히 적고 싶은 부분 또는 코드 작성 시점에 형태를 알 수 없는 값 등의 타입 표기에 유용하다. 하지만 any를 남용하면 타입 안정성에 구멍이 뚫린 코드가 되어 타입스크립트를 사용하는 의의가 사라지므로 꼭 필요한 경우에만 사용해야 한다.

void

void는 null과 undefined 만을 값으로 가질 수 있는 타입이다. 아무런 값도 반환하지 않는 함수의 반환 타입을 표시할 때 사용한다.

function nothing(): void {}

never

never는 아무런 값도 가질 수 없는 타입이다. 아무런 값도 가질 수 없는 타입은 과연 어떤 쓸모가 있을까?

function alwaysThrow(): ??? {
	throw new Error(`I'm a wicked function!`);
}

의미상으로 never 타입은 절대 존재할 수 없는 값을 암시한다. 따라서 never 타입의 변수에는 null, undefined를 포함해 어떤 값도 할당할 수 없다. 위의 alwaysThrow 함수는 항상 에러를 throw하므로 어떤 값도 반환하지 않는다. 이 때, 이런 함수의 반환 타입을 never 타입을 사용해 나타낼 수 있다.

function alwaysThrow(): never {
  throw new Error(`I'm a wicked function!`);
}

출처 :https://ahnheejong.gitbook.io/ts-for-jsdev/03-basic-grammar/primitive-types

profile
무언가를 만들어낸다는 것은 무척이나 즐거운 일입니다.

0개의 댓글