[TypeScript] 2. type의 종류

wonnie1224·2022년 7월 22일
0

TypeScript

목록 보기
2/4

노마드코더님의 Typescript로 블록체인 만들기 강의를 보고 타입스크립트 기본 공부를 시작했다.
링크텍스트
학기 중에 C#을 배웠었는데 OOP라 그런지 비슷한 내용들이 나와서 생각했던 것보다는 내용을 이해하기 수월했던 것 같다.
그래도 타입스크립트가 js의 기본 문법은 알고 있어야 배우기 쉬운 것 같다..ㅠㅠ
중간중간에 모르는 js 문법들이 나오면 검색을 해보면서 이해했담

//Alias 타입 생성
type Age = number;
type Name = string;
type Player = {
    readonly name:Name,
    age?:Age    //선택적 타입
}
/*const nico : Player = {
    name:"nico"
}

const lynn : Player = {
    name:"lynn",
    age:12
}*/

// argument(여기선 name)의 타입을 string으로 지정
//함수의 return 값의 타입을 Player타입으로 지정
function playerMaker(name:string) : Player{
    return {
        name
    }    
}
const nico = playerMaker("nico")
nico.age = 12    

//화살표 함수의 경우 return 타입 지정 방법
// const playerMaker = (name:string) : Player => ({name})

//타입에 readonly를 추가할 수 있음 -> 다른 사람이 해당 값을 수정 못하게 함
//즉 readonly는 불변성을 준다
const numbers : readonly number[] = [1, 2, 3, 4]
// numbers.push(1)
// push라는게 readonly number[]타입에 존재하지 않아서

const names : readonly string[] = ["1","2"]
// names.push()
names.map // 이건 배열을 안 바꿔서 가능함

? = number or undefined
any : typescript로부터 빠져나오고 싶을 때 쓰는 타입 -> 모든 보호장치를 비활성화시킴
-> 아무 타입이나 될 수 있다는 뜻
그래서 자주 쓰지 않는 걸 추천함

// Tupe : array를 생성하는데 최소 길이 정해져 있음, 특정 위치에 특정 타입이 있어야 함
const player : [string, number, boolean] = ["nico", 1, true]
// 항상 정해진 개수의 요소, 정해진 타입을 가져야하는 array를 지정할 수 있음

tuple + readonly

const player : readonly [string, number, boolean] = ["nico", 1, true]

// 자바스크립트에도 있는 타입
let a : undefined = undefined
let b : null = null

unknown 타입 : 어떤 타입인지 모르는 변수에 사용

let a : unknown;
if(typeof a === 'number')
{
    let b = a + 1
}
if(typeof a === "string")
{
    let b = a.toUpperCase();
}

void : 아무것도 return하지 않는 함수를 대상으로 사용

function hello() {
    console.log('x')
}

never : 함수가 절대 return하지 않을 때 사용 ex) 힘수에서 예외(에러)가 발생할 때

function hello():never {
    throw new Error("xxx")
}

타입이 2가지일 수도 있는 상황에도 발생 가능

function hello(name:string|number) {
    if(typeof name === "string") {
        name    // 이 name은 string 타입
    }
    else if(typeof name === "number") {
        name   // 이 name은 number 타입
    }
    else {
        name    // 이 name은 never타입, 절대 시행되면 안 돼서
    }
}
profile
안녕하세요😊 컴퓨터비전을 공부하고 있습니다 🙌

0개의 댓글