이 글은 TypeScript 홈페이지(https://www.typescriptlang.org/docs/handbook/basic-types.html)을 바탕으로 작성되었다.
더 자세한 내용을 원한다면 위 링크로!
Enum
찾아보니 자바스크립트(ES6 기준)에서는 Enum이라는 데이터타입 자체를 따로 제공하지는 않는 듯했다.
타입스크립트에서는 Enum이라는 변수 타입을 제공하고 그에 대해서 설명하고 있다.
enum은 숫자값에 대해 이름을 정의하는 방법이다.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
이 코드를 enum.ts 파일을 만들고 입력한다음 tsc enum.ts로 실행시키고 enum.js를 확인해보면
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
var c = Color.Green;
기본적으로 enum은 원소를 0부터 세는데 처음에 시작하는 숫자를 바꾸는 방법은 간단하다.
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
코드를 바꾸고 저장한 다음 실행시키면
var Color;
(function (Color) {
Color[Color["Red"] = 1] = "Red";
Color[Color["Green"] = 2] = "Green";
Color[Color["Blue"] = 3] = "Blue";
})(Color || (Color = {}));
var c = Color.Green;
Red = 1로 해줬더니 Green, Blue에도 자동적으로 각각 2, 3이 할당되어 있는 것을 볼 수 있다.
이런 식으로 각각의 원소에 수동적으로(manually) 값을 설정할 수 있다.
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
Color[2]는 []안의 값과 일치하는 enum 원소의 이름을 반환한다.
Any
알지 못하는 변수의 타입을 설명해야 할 때가 있다. 이러한 값들은 동적인 컨텐츠인 서드 파티 라이브러리에서 발생하며 이 경우 암묵적으로 타입을 확인하고 컴파일할 때 값을 넘겨주게 될 것이다. any는 이런 타입을 명시할 때 쓴다.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false
any 타입의 역할이 Object와 겹친다고 생각할 수도 있지만 Object는 값을 할당할 수 있을 뿐 실제로 메소드가 존재하더라도 호출할 수 없다.
let notSure: any = 4;
notSure.ifItExists();
notSure.toFixed();
let prettySure: Object = 4;
prettySure.toFixed();
위 코드를 입력하고 실행시키면 오브젝트 타입에는 해당 프로퍼티가 없다는 에러가 뜬다.
any 타입은 일부 타입을 알고 있지만 모든 타입은 알지 못할 때 쓴다.
let list: any[] = [1, true, "free"];
list[1] = 100;
Never
never
타입은 절대 만들어지지 않을 값의 타입을 나타낼 때 쓴다. 항상 예외를 잡아내거나 반환하지 않는 함수(계속해서 loop 돌면서 메모리 초과 일으키는 함수를 말하는 듯)에 쓰는 타입이다. 절대 true가 될 수 없는 변수에도 never
타입을 적용한다.
never
는 모든 타입에 할당할 수 있으며 모든 타입의 하위타입이지만 never
에 할당할 수 있는 타입은 없으며 never
의 하위 타입 또한 존재하지 않는다. never
만이 never
에 할당될 수 있으며 never
의 하위 타입이다. any
도 never
에 할당될 수 없다.
// never를 리턴하는 함수는 분명 도달할 수 없는 엔드 포인트를 가질 것임
function error(message: string): never {
throw new Error(message);
}
// never를 리턴할 것으로 예상됨
function fail() {
return error("Something failed");
}
// never를 리턴하는 함수는 분명 무한루프를 돌 것임
function infiniteLoop(): never {
while (true) {
}
}
Type Assertions
Type assertions(타입 명시)
는 컴파일러에게 내가 뭘 하고 있는지 알고 있다는 신호를 보내는 방법이다. 타입 명시는 따로 타입을 체크하거나 데이터를 재구조하지 않는다.
// angle-bracket syntax
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// as syntax
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
자바스크립트로 변환된 코드는 다음과 같다.
var someValue = "this is a string";
var strLength = someValue.length;
댓글