[typescript] 타입스크립트 기본타입들
![](https://pbs.twimg.com/profile_images/743155381661143040/bynNY5dJ_400x400.jpg)
Typescript - basic types
타입스크립트의 기본타입들을 살펴봅니다.
📝 목차
Boolean
true
또는 false
를 값으로 갖습니다.
// TSlet isMe: boolean = true;// TS to ES5var is = true;
Number
Javascript 와 동일하게 타입스크립트도 부동소수점을 갖습니다.
// TSlet num: number = 10;// TS to ES5var num = 10;
String
작은따옴표('') 또는 큰따옴표("") 로 감싸 표현할 수 있습니다. Template Literal 을 이용하려면 백틱(``) 으로 감싸면 됩니다.
// TSlet myName: string = 'heecheolman';let greet: string = `Hello My name is `;// TS to ES5var myName = 'heecheolman';var greet = "Hello My name is " + myName;
Array
배열을 표현하는 방식은 두가지가 존재합니다.
- type[]
- Array
// TSlet list: number[] = [1 2 3 4];let list: Array<number> = [1 2 3 4];// TS to ES5var list = [1 2 3 4];var list = [1 2 3 4];
Tuple
튜플 타입으로 요소의 수와 요소의 타입이 정확히 지정된 배열의 타입을 정의할 수 있다.
// TSlet person: [number string] = [24 'heecheolman'];// TS to ES5var person = [24 'heecheolman'];
당연히 튜플의 요소는 배열도 가능하다. 다음 예에서 첫번째 요소는 자동차 색상들, 두번째 요소는 드라이버 이름을 나타낸다. (실제론 차 없음) 튜플의 첫번째 요소에 string[]
인것, 그리고 Array 의 prototype 메서드인 push
도 사용가능하다는것을 확인하자!
// TSlet car: [string[] string];carpush(['white' 'black' 'blue'] 'heecheolman');// TS to ES5var car;carpush(['white' 'black' 'blue'] 'heecheolman');
이렇게도 가능하다. [string, string]
형태의 배열임을 생각하자.
// TSlet car: [string string][];car = [['black' 'heecheol'] ['white' 'hoocheol']];// TS to ES5var car;car = [['black' 'heecheol'] ['white' 'hoocheol']];
만약 요소를 추가할 때 튜플의 타입에 없는 타입이면 에러를 뱉는다.
// TSlet identify: [number string] = [1 'heecheolman'];identifypush(true); // Error!// TS2345: Argument of type 'true' is not assignable to parameter of type 'string | number'.
그리고 튜플의 요소에 대해 접근 할 시 각 요소에 정해진 타입으로 접근됩니다. 예를들어 다음과 같은 예에서
toFixed()
: 고정소수점 표기법은 Number.prototype 에만 존재하고 String 에는 존재하지 않기에 에러를 뱉습니다.
// TSlet person: [number string] = [24 'heecheolman'];person[0]toFixed(); // Ok!person[1]toFixed(); // Error!// TS2339: Property 'toFixed' does not exist on type 'string'.
Enum
다른언어와 마찬가지인 열거형입니다. '숫자' 데이터를 가독성 좋게 표현할 수 있습니다.
enum Color {RedGreenBlue}let c: Color = ColorGreen;consolelog(c); // 1let colorName: string = Color[ColorBlue];consolelog(colorName); // Blue
다른 언어의 enum 은 숫자로만 반환되는데 반해 자바스크립트는 반대로 string 까지도 반환을 해줍니다.
colorName
을 보면 알 수 있습니다. console.log(Color)
를 통해 내부 속성들을 확인할 수 있습니다.
타입스크립트는 enum
을 어떻게 구현을 했을까요?
위의 enum 코드는 아래와 같이 컴파일됩니다.
// TS to ES5var ;(function () {[["Red"] = 0] = "Red";[["Green"] = 1] = "Green";[["Blue"] = 2] = "Blue";})( || ( = {}));
그리고 이것을 다시 구성해보면 다음과 같습니다.
var ;(function () {["Red"] = 0;["Green"] = 1;["Blue"] = 2;[0] = "Red";[1] = "Green";[2] = "Blue";})( || ( = {}));
IIFE 를 통해 각 속성들을 정의하는것을 볼 수 있습니다.
Any
타입스크립트에는 Any 라는 타입이 있는데 알지 못하는 변수 유형 이 있다면 이 타입을 사용합니다. 예를들어 동적으로 결정되는 변수의 유형들은 any 로 지정해주는데, 컴파일러는 컴파일 시 any 타입에 대하여 타입 검사를 하지않습니다.
// TSlet what: any = 1;what = 'what'; // Ok!what = true; // OK!// TS to ES5var what = 1;what = 'what';what = true;
하지만 Object 타입의 변수는 값을 할당할 수만 있습니다.
// TSlet obj: Object = 4;objtoFixed(); // Error!// TS2339: Property 'toFixed' does not exist on type 'Object'.
Void
타입이 전혀 없는 타입입니다. 보통, 값을 반환하지 않는 함수의 반환유형으로 이 타입을 사용합니다.
// TSfunction warning(): void {alert('Warning!!');}// TS to ES5function warning() {alert('Warning!!');}
변수의 타입으로도 사용할 수 있지만 null
과 undefined
만 할당이 가능하여 유용하지 않다고 합니다.
// TSlet unusable: void;unusable = undefined; // Ok!unusable = null; // Ok!unusable = 1; // Error!// TS2322: Type '1' is not assignable to type 'void'.
Null과 Undefined
각각 null은 null
undefined 는 undefined
값을 갖습니다.
// TSlet u: undefined = undefined;let n: null = null;// TS to ES5var u = undefined;var n = null;
tsconfig의 strictNullChecks를 활성화하자!
tsconfig 의 strictNullChecks 를 꺼놓은 경우에는 null
, undefined
값을 할당할 수 있지만 strictNullChecks
를 활성화하면 모든 타입은 null
과 undefined
값을 가질 수 없습니다. 갖게되는 경우는 다음과 같습니다.
- union type 으로 직접 명시
- any 타입은 null 과 undefined 를 갖을 수 있음
- void 타입은 undefined 를 가짐
"strictNullChecks 를 적용하지 않고, 어떤 값이 null 과 undefined 를 갖는다는것을 암묵적으로 인정하고 계속 사용하다보면 정확히 어떤 타입이 오는지를 개발 스스로가 간과할 수 있다. 정말로 null 과 undefined 를 가질수 있는 경우, 해당 값을 조건부로 제외하고 사용하는 것이 좋습니다. 이 옵션을 켜고 사용하는 경우, 사용하려는 함수를 선언할 때부터 매개변수와 리턴 값에 정확한 타입을 지정하려는 노력을 기울여야 하고, 기울이게 될 것입니다."
2018 devFest Seoul [타입스크립트 빡빡하게 사용하기] - 이웅재님
Never
never 타입은 절대로 발생하지 않는 값의 타입입니다. 예를들어
- 함수 표현식의 리턴 타입이거나
- 항상 예외를 던지는 arrow function 이거나
- 리턴하지 않는 표현식
// TS// 에러를 발생시켜 반환이 없는 경우.function error(message: string): never {throw new Error(message);}// 항상 에러를 반환하는 화살표 함수인 경우.((): never => error('fail'))();// 끝나지 않는 함수로 절대 반환이 될 수 없는 경우.function infiniteLoop(): never {while(true) {// something ...}}