변수명 옆에 콜론(:)을 넣어서 우리가 원하는 타입을 줄 수 있다. hello 변수에 우리가 지정한 타입이 아닌 값을 할당한다면 에러를 표시한다.

이렇게 타입스크립트를 사용하면 코드를 작성하는 단계에서 에러를 발생시켜 타입을 강제할 수 있게 해준다.
그럼 우리는 어떤 타입을 지정해줄 수 있을까? 기본적으로 자바스크립트의 타입들을 지정할 수 있다. 거기에 더해 타입스크립트에만 존재하는 타입을 알아보자.
let anyVar: any;
anyVar = 10;
anyVar = '태연';
anyVar = true;
어떤 타입이든 입력할 수 있는 치트키라고 생각하면 된다. any를 너무 많이 사용하면 자바스크립트를 사용하는 것과 다를 것이 없어 타입스크립트를 사용하는 의미가 없어진다. 따라서 적절한 곳에 사용해야 한다.
let testNumber: number = anyVar;
let testString: string = anyVar;
let testBoolean: boolean = anyVar;
위의 코드와 같이 any 타입을 가진 변수는 다른 타입에도 할당이 가능하다. any 타입을 가진 변수 anyVar를 number 타입, string 타입, boolean 타입에도 할당이 가능하다.
let unknownType: unknown;
unknownType = 100;
unknownType = '코드팩토리';
unknownType = true;
말 그대로 알 수 없는 타입이다. 위의 코드만 보면 any와 유사하다고 느낄 수 있다. unknown 또한 어떤 타입에 넣을 수 있다. 하지만 any와 unknown은 중요한 차이점이 있다.
let testNumber2: number = unknownType; // X
let testString2: string = unknownType; // X
let testBoolean2: boolean = unknownType; // X
let unknownType2: unknown = unknownType; // O
let anyType2: any = unknownType; // O
둘의 가장 큰 차이점 중 하나는 unknown 타입은 어떤 타입이든 할당을 할 수는 있지만 다른 타입(unknown, any 제외)의 변수에는 할당할 수는 없다.
let neverType: never = null; // X
let neverType: never = undefined; // X
let neverType: never = 'test'; // X
어떠한 값도 저장되거나 반환되지 않을 때 사용하는 타입이다. 나중에 함수, 인터섹션에서 자세히 알아볼 것이다.
const koreanSingers: string[] = ['성시경', '태연', '박효신']; // O
const koreanSingers: string[] = ['성시경', '태연', '박효신', 1234] // X
즉, string[]의 의미는 string 타입으로만 구성된 리스트만 생성할 수 있다는 의미다. 다른 예제도 살펴보자.
const booleanList: boolean[] = [true, false, false];
boolean[]은 boolean 타입으로만 구성된 리스트인 것이다.
타입스크립트는 빌드할 때, 즉 실행하기 전에 사용하는 언어다. 타입스크립트는 실행할 때 자바스크립트로 컴파일된다. 결국엔 최종적으로는 자바스크립트가 실행이 되는 것이다. 그래서 타입스크립트는 코드를 실행하는 데 어떤 오버헤드도 발생시키지 않는다.
any 타입, unknown 타입을 남발하면 런타임에서 에러가 생긴다. 컴파일 전에만 타입을 보장해준다는 사실을 잊지말자.