Typescript 1. Types

Alpha, Orderly·2023년 1월 5일
0

typescript & javascript

목록 보기
1/6
post-thumbnail

Types

타입스크립트의 여러 타입들에 대한 설명들.

A. Type Inference

타입을 지정하지 않더라도 명확한 경우 타입스크립트에서 타입을 추론 가능하다.

let a = 1

의 경우 number라고 타입 지정을 하지 않았으나 자동으로 a는 number가 된다.

B. Type alias

비슷한 타입을 반복 사용할 경우 별명을 붙힐수 있다.

type human = {
    name: string,
    age: number
}

문자열인 사람 이름과 숫자인 나이를 저장할수 있는 object type의 별명이다.

1. number

숫자를 저장할수 있다, 다른 언어와 달리 정수와 실수 둘 다 저장 가능하다.

let num: number
num = 1
num = 2.3

2. string

문자열을 저장할수 있다.

let str: string 
str = 'hello string'

3. boolean

true / false를 저장할수 있다.

let b: boolean
b = true
b = false

4. object

자바스크립트의 object를 저장하는 코드인데,

let human: object = {
    name: 'Sally'
}

위와 같이 object를 사용할수도 있으나, 이는 권장되지 않는다.

이보다는

let human: {
    name: string
} = {
    name: 'Sally'
}

와 같이 key의 이름과 value의 type을 지정해 만들수도 있다.

아래 경우 자동 완성도 되면서 에러도 나지 않는다.

Nested object

오브젝트 안에 오브젝트가 있는 경우에도 비슷하게 작성하면 된다.

type human = {
    name: string,
    age: number,
    eye: {
        sight: number,
        disease: string
    }
}

인간 오브젝트 내부에 눈의 상태를 나타내는 오브젝트를 포함하는 타입이다.

5. Array

배열의 경우

string[]
int[]

와 같이 특정 자료형만 담을수 있는 배열과

any[]

와 같이 어떤것이든 담을수 있는 배열이 있다.

Union 자료형을 이용해

(string | number)[]

과 같이 복수 자료형을 담을수 있도록 할수도 있다.

6. Tuple

길이와 내장 타입이 모두 저장되어 있는 배열이다.

예를 들자면 첫번째 값은 무조건 숫자이고 두번째 값은 무조건 문자열인 두 길이의 배열을 들수 있다.

이 경우

let a: [number, string] = [1, 'a']

와 같이 대괄호 안에 type을 적어주면 된다.

7. Enum

enum Role {ADMIN, USER}

과 같이 선언하며 기본적으로 값은 시작이 0이 들어가고 1씩 증가되는 숫자가 들어간다.

사용은

let a: Role = Role.ADMIN

과 같이 할수 있으며

enum Role {ADMIN=4, USER}

과 같이 시작 숫자를 바꿀수도 있고

문자열을 값으로 지정해 줄수도 있는데, 문자열을 지정시 자동으로 1씩 증가하는게 안되기에 모든 값이 값을 대입해 주어야 한다.

enum Role {ADMIN='admin', USER='user'}

8. any

어떤 값이든 저장할수 있는 type이다.

대입또한 자유롭다.

9. union type

만약 a라는 자료형에 숫자나 문자열을 넣고 싶을때 쓰일수 있으며

| 를 이용해 두 자료형을 구분한다.

let a: string | number
a = 1
a = 'a'
// 에러가 발생하지 않는다.

함수의 패러미터에도 사용이 가능한데, 이 경우 런타임에 타입체크가 필요하다.

function add(n1: number | string, n2: number | string){
// 타입 체크 이후 알맞은 코드를 실행한다.
    if(typeof n1 === 'number' && typeof n2 == 'number') {
        return n1 + n2;
    } else {
        return n1.toString() + n2.toString();
    }
}

10. Literal type

const 변수의 경우 위 타입들이 아닌 자기 자신이 type이 된다.

	const hello = "hello"	 // "hello" type
    let bye = "bye"			 // bye type
    

이를 이용해

type flower = "rose" | "iris"

와 같이 일부 문자열만 받을수 있는 타입이나

type class = 1 | 2 | 3 | 4

일부 숫자만 받을수 있는 type을 지정할수 있다.

11. 이 외

unknown type

any와 동일하게 사용 가능하나, 다른 자료형에 대입 전에 type check를 필요로 합니다.

never type

함수가 끝나지 않거나 중간에 에러로 인해 리턴이 없을 경우 리턴타입으로 사용됩니다.

void type

함수가 리턴하지 않아도 된다는것을 의미합니다.


여러가지 추가적인 Type들

Map

  • Map<Key type, Value type>
  • Key/Value 쌍 저장
save: Map<number, {value: number, createdAt: Date, duration: number}>
profile
만능 컴덕후 겸 번지 팬

0개의 댓글