개발 일기

기본 Type ? 본문

컴퓨터 언어/Typescript

기본 Type ?

이건욱

Boolean 

가장 기본적인 Data Type으로써 True / False 만 존재합니다.

let isDone: boolean = false;

 

Number

숫자 형 Value로써 (실수 , 16진수 , 10진수) 표시할수 있습니다.

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

 

String

문자 데이터 형입니다. ' or " 안에 있어야 합니다.

` 안에 있으면 다양한 줄이 가능합니다. 그리고 안에 변수를 포함시킬수 있습니다.

let color: string = "blue";
color = 'red';
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.

I'll be ${ age + 1 } years old next month.`;

 

Array

Typescript 에서는 Array에서는 두가지로 표현이 가능합니다. 첫번째는 [] 표현하는 방법과 두번째는 Array로 표현이 가능합니다.

let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];

 

Tuple

Tuple은 고정된 수와 타입은 알고 있지만, 값의 종류가 다른 값들을 표현할수 있습니다.

 

접근 할때는 타입이 그대로 반환 하므로 주의해야 합니다.

접근하고 싶은 index가 초과할 경우 아래와 같이 에러가 납니다.

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
// Initialize it incorrectly
x = [10, "hello"]; // Error
Type 'number' is not assignable to type 'string'.
Type 'string' is not assignable to type 'number'.

console.log(x[0].substring(1)); // OK
console.log(x[1].substring(1)); // Error, 'number' does not have 'substring'
Property 'substring' does not exist on type 'number'.

x[3] = "world"; // Error, Property '3' does not exist on type '[string, number]'.
Tuple type '[string, number]' of length '2' has no element at index '3'.

console.log(x[5].toString()); // Error, Property '5' does not exist on type '[string, number]'.
Object is possibly 'undefined'.
Tuple type '[string, number]' of length '2' has no element at index '5'.

Enum

C#과 마찬가지로 enum 숫자값 데이터셋에 사람이 더 친숙한 방법으로 이름을 지정하는 방법 입니다.

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

기본적으로 enum은 시작을 0부터 시작합니다.

다음과 같은 값을 수동적으로 변경할수 있습니다.

enum Color {
  Red = 1,
  Green,
  Blue,
}
let c: Color = Color.Green;

enum Color {
  Red = 1,
  Green = 2,
  Blue = 4,
}
let c: Color = Color.Green;

 

enum의 편리한 특징은 숫자 값으로 enum의 값 이름을 얻을수 있습니다. 

예를 들어 아래와 같은 경우에는 다음과 같이 표시가 됩니다.

enum Color {
  Red = 1,
  Green,
  Blue,
}

console.log(Color[1] , Color[2] , Color[3]); //Red , Green, Blue

 

Any

우리가 어플리케이션을 작성을 할 때 변수 타입을 선언을 안할지도 모릅니다. 그럴 때 사용하는 것이 Any입니다.

이 변수는 동적은 content을 표시할수 있습니다.

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

Javascript와 함께 사용할수 있는 강력한 방법입니다. 

이 내용을 보면 Javascript Object타입과 비슷한 역할을 합니다.

그러나 Object는 값을 할당할수가 있고 실제 존재하는 메소드라도 임의에 메소드를 호출할 수 없습니다.

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)
let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

any 타입은 편리하긴 Typescript의 장점을 많이 사라지므로 최대한 많이 사용을 안하는것이 좋습니다.

예를 들어 다음과 같이 배열중에서도 값이 다른 타입이 존재 할수 있습니다.

let list: any[] = [1, true, "free"];

list[1] = 100;

 

Void

Void는 any와 반대되는 타입입니다. 어떤 타입도 가질수 없고 보통적으로는 함수에서 return을 안하고 싶을때 사용을 합니다.

function warnUser(): void {
  console.log("This is my warning message");
}

void 타입은 undefined or null 만 가능하기 때문에 그렇게 유용하지는 않습니다.

let unusable: void = undefined;
unusable = null; // OK if `--strictNullChecks` is not given

 

Null 과 Undefined 

null 과 undefined는 실제로 각각 undefined 와 null이라는 타입을 가지고 있습니다.

void와 마찬가지로 이러한 타입들을 실제로는 유용하지 않습니다.

// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

기본적으로 null undefined는 다른 모든 유형의 하위 유형입니다. 즉,null undefined number와 같은 것에 할당할 수 있습니다.

 

--strictNullChecks 플래그를 사용할 경우 null undefined void와 각각의 타입 변수에만 할당 가능합니다. 이렇게하면 많은 일반적인 오류를 피할 수 있습니다.

 

Never

never type은 절대로 발생하지 않는 값의 타입을 나타냅니다. 주로 사용이 될때는 exception과 같이 throw 되는 함수에 주로 사용합니다.

 

다음은 사용 예시입니다.

아래 처럼 아예 끝이 보이지 않는 함수 이거나 아니면 에러를 할때 다음과 같이 사용합니다.

// Function returning never must have unreachable end point
function error(message: string): never {
    throw new Error(message);
}
// Inferred return type is never
function fail() {
    return error("Something failed");
}
// Function returning never must have unreachable end point
function infiniteLoop(): never {
    while (true) {
    }
}

 

Object

object는 non-primitive type 입니다. 즉 number , string , boolean , symbol , null , undifined 이 아닌것이 object type입니다.

declare function create(o: object): void;
create({ prop: 0 }); // OK
create(null); // Error
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

 

Type assertions

타입 스크립트를 사용하면서 현재 타입에 대해서 더 구체적인 타입을 알고 있지만 이것을 사용하고 싶을 때에는 Type assertions을 사용합니다.

이것은 다른 언어에 type cast와 비슷합니다.

 

다음과 같이 두가지 방법으로 사용이 가능합니다.

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

'컴퓨터 언어 > Typescript' 카테고리의 다른 글

Literal Types ?  (0) 2020.05.03
Function ?  (0) 2020.05.03
Class ?  (0) 2020.05.01
Interface ?  (0) 2020.04.30
변수 선언 ?  (0) 2020.04.26
Comments