본문 바로가기

개발/JavaScript

[TypeScript] Types

 

TypeScript

- 타입 문법이 추가된 자바스크립트

- TS -> JS transpile

- TS를 JS로 변환하기 전 문법을 체크하여 에러 발생

 

에러
타입

 

 

Types

Optional parameter: 선택적 변수

- player object는 이름을 가지지만 나이는 옵션

- 변수명? : 타입

const player : {
    name: string,
    age?: number // age: number | undifined
} = {
    name:"hi"
};

if(player.age && player.age < 10) { // age가 존재한다면 이라는 조건을 추가
  ...
}

 

Type Alias: 별칭 타입

- 코드의 재사용성 증가, 불필요한 코드 제거

type Age = number; // 첫문자는 대문자
type Name = string;
type Player = {
    name:Name,
    age?:Age
};

const hihi : Player = {
    name:"hihi"
};

const hoho : Player = {
    name:"hoho"
};

 

Return Type

function playerMaker(name:string) : Player { // 파라미터, 리턴타입 명시
    return {
        name // name:name 이름이 같다면 생략가능
    }
}

const nono = playerMaker("nono");
nono.age = 12;

- 화살표 함수 적용

const playerMaker = (name:string) : Player => ({name});

 

readonly

- 불변성

type Player = {
    readonly name:Name,
    age?:Age
};
const numbers : readonly number[] = [2,3,4];
numbers.push(1); // Property 'push' does not exist on type 'readonly number[]'.

 

Tuple

const player : (readonly) [string, number, boolean] = ["hoho", 12, false];
player[0] = 1; // Type 'number' is not assignable to type 'string'.

 

any

- ts의 제어를 벗어나고 싶은 경우

const a : any[] = [1,2,3,4]
const b : any = true;

a+b // "1,2,3,4true"

 

unknown

- 어떤 타입인지 모를 경우

- 타입 확인 필요

let a : unknown;

if(typeof a === 'number') {
    let b = a + 1;
};

if(typeof a === 'string') {
    let b = a.toUpperCase();
};

 

void

- 리턴 값이 없는 경우

void

 

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

const a = hello();

a.toUpperCase(); // Property 'toUpperCase' does not exist on type 'void'.

 

never

- 절대 리턴을 하지 않음

- 에러 발생시 사용

function hello() : never {
    // return "X"; // Type 'string' is not assignable to type 'never'.
    throw new Error("xxx");
}

 

 

 

'개발 > JavaScript' 카테고리의 다른 글

[TypeScript] Classes  (0) 2022.08.04
[TypeScript] Functions  (0) 2022.08.04
[Node.js] Auth route, Logout Route  (0) 2022.07.22
[Node.js] login route  (0) 2022.07.22
[Node.js] 정보보호, Bcrypt  (0) 2022.07.21