[Typescript] 1. Type

javascript는 개발자에게 최대한 오류를 덜 띄워주는 언어이다. IDE에서는 물론, 브라우저에서까지!

그래서 처음에 간단한 코드를 짤 때는 오히려 좋을 때도 있었으나(낮은 러닝 커브) 웹 개발을 하던 도중 변수의 철자를 틀리거나, 조건을 잘못 설정한 경우, 혹은 프로젝트의 볼륨이 커질 경우 디버깅을 하기 불편했다. 개발자들의 실수를 줄여주고, js의 이런 점을 극복하기 위해서 ts를 배워야 한다는 생각을 하게 되었다.

 

ts는 js와 다르게 코드를 실행하기 전에도 오류를 검출해준다! 이 점이 정말 매력적이라 느꼈기 때문에 조금만 익혀두면 정말 생산성이 올라가고 왜 ts를 배우려는지,,, 납득할 수 있었다

 

아무튼...

 

ts에서는 명시적 정의로 변수를 만들거나, 타입을 추론하는 식으로 변수를 만들 수 있다. 

let a: number = 1; // 명시
let b = true // boolean으로 추론을 통해 변수 생성

 

type Player = {
    name : string,
    age? : number
    // age 뒤에 ? 붙여서 필수가 아니도록
}
const playerA :Player = {
    name : 'A'
}
const playerB :Player = {
    name : 'B',
    age : 20
}

function playerMaker(name:string):Player {
    return {
        name : name
    }
}
// 화상표 함수의 경우
const playerMaker2 =(name:string) :Player => ({name : name}) 

const pA = playerMaker("playerA")
pA.age = 20

 

 

type Player = {
    readonly name : string,
    age? : number
}
const playerA :Player = {
    name : 'A'
}


function playerMaker(name:string):Player {
    return {
        name : name
    }
}

const pA = playerMaker("playerA")
pA.age = 20
pA.name = 'a' // readonly이기 때문에 수정 불가

 

const player : [string, number, boolean] = ['sw', 20, true]

player[0] = 123; // 타입이 달라 바꿀 수 없다

const player2 : any[] = [1,2,true]
player2[0] = 'asdf' // any 형으로 자료형을 선언하면 수정할 수 있다 (any는 js처럼 ts의 제약을 없애는 것)

 

number, string, boolean 이외에도 ts에만 존재하는 type이 있다. 바로 unknown, void, unknown이 있다. void는 정말 많이 써봤기 때문에 패스하고,,,

let a:unknown; //변수 타입을 미리 알지 못할때 사용

if (typeof a == "string") {
    a = a.toUpperCase();
} else if (typeof a == "number") {
    a += 1
}

function hello():never {
    throw new Error(); 
    // 오류 발생시켜야 잘 돌아간다. 함수가 예외를 throw
}

function temp(name:string|number) {
    if(typeof name === "string"){
        name
    } else if(typeof name === "number"){
        name
    } else {
        // type이 never. 프로그램 실행을 종료함
        name
    }
}

이런 식으로 사용한다. never는 런타임 오류를 throw하거나, 무한루프에 빠지는 등의 예외적인 상황에서 사용된다는 점이 void와 차이점이다!

TAGS.

Comments