티스토리 뷰

타입스크립트

필요성 

  • 자바스크립트 코드가 너무 지저분하다.
  • 코드의 스케일이 커지면서 코드 관리가 되지 않는다.

좋은점

  • 자바스크립트 기반보다 버그를 줄일 수 있다.
  • 유지보수가 쉽다.
  • 강력한 높은 퀄리티의 코드를 생산할 수 있다.

타입스크립트 = 자바스크립트 + 타입체크

  • 타입스크립트 환경에 자바스크립트를 코딩하면 동작함.
  • 자바스크립트 환경에 타입스크립트응 코딩하면 동작안함.

타입스크립트로 작성된 코드는 자바스크립트로 컴파일 돼야함.

타입스크립트는 언어인 동시에 컴파일러.

 

타입스크립트 실행

글로벌 설정
tsc --init

tsconfig.json 파일이 생성되고, 타입스크립트 설정이 완료된다.

 

tsc app.ts

app.js가 생성되며, 이후 node app.js로 실행 가능하다.

 

tsc -w app.ts

-w 옵션(watch)을 사용하면 app.ts 파일을 수정할 때마다 자동으로 app.js로 컴파일이 된다.

내용이 같이 바뀜.

 

데이터 타입과 추론

타입추론기능

 

  • 타입스크립트는 컴파일러가 초기에 할당된 값을 바탕으로 변수의 타입을 추론
  • 타입스크립트는 변수 뒤에 : 타입처럼 타입을 직접 적을 수 있음.
    하지만 적지 않아도 자바스크립트처럼 타입을 자동으로 추론해줘서 에러는 나지 않음.
  • 그렇지만 타입을 안 적으면 버그가 생길 수 있기 때문에, 특히 복잡하거나 헷갈리는 경우에는 타입을 꼭 명시하는 게 좋다.

 

데이터 타입의 종류

 

기본 데이터 타입

  • number : 숫자 타입으로, 정수와 실수를 포함
  • string : 문자열 타입
  • boolean : 참, 거짓을 나타내는 불리언 타입
  • null : 값이 없음을 나타내는 타입
  • undefined : 값이 할당되지 않는 변수의 기본값인 타입

객체 타입 

  • object : 객체를 나타내는 타입
  • array : 동일한 타입의 요소를 가진 배열을 나타내는 타입
  • tuple : 각 요소가 다른 타입을 가질 수 있는 배열을 나타내는 타입

특수 타입

  • any : 어떠한 타입이든 할당될 수 있는 타입
  • unknown: 타입을 미리 알 수 없는 경우 사용되는 타입

 

타입스크립트 타입 명시

타입 명시

  • 변수를 선언할 때 변수 값의 타입을 명시함으로써 변수의 데이터 타입을 지정한다.

변수에 데이터 타입을 지정하는 방법

  • 변수 선언 시 데이터 타입을 지정한다.
  • 타입스크립트를 자바스크립트로 컴파일 할때 데이터 타입에 다른 값이 할당되면 오류 발생
//변수의 데이터 타입 명시시

let stdId : number = 1111;
let stdName : string= "John Doe";
let age : number = 20;
let gender : string= 'male';
let course : string = 'Typescript';
let completed : boolean = false;

//컴파일 에러 - syntax에러

//함수의 테이터 타입 명시(매개변수, 리턴타입)
function plus(a: number, b: number): number {
    return a + b;
}

console.log(plus(10, 20)); // 30

 

function plus(a: number, b: number): void {
    return a + b;
}

리턴타입에 void가 들어가면 아무것도 리턴하지 않는다.

let stdId : number = 1111;
let stdName : string= "John Doe";
let age : number = 20;
let gender : string= 'male';
let course : string = 'Typescript';
let completed : boolean = false;

function getInfo(id : number) : {
stdId : number;
stdName : string;
age : number;
gender : string;
course : string;
completed : boolean;

}
{
    return null;
    }

인터페이스

interface Student {
stdId : number;
stdName? : string;
age? : number;
gender? : string;
course? : string;
completed? : boolean;
}

인터페이스에 ?만 붙여주면 옵셔널 기호가 됨

setName(name : string) : void;
setName : (name : string) => void;

위 아래 코드가 같은 것임

let stdId : number = 1111;
let stdName : string= "John Doe";
let age : number = 20;
let gender : string= 'male';
let course : string = 'Typescript';
let completed : boolean = false;

interface Student {
stdId : number;
stdName : string;
age? : number;
gender : string;
course : string;
completed : boolean;
}

function getInfo(id : number) : Student
{
    return {
        stdId : id,
        stdName : 'lee',
       // age : 20,
        gender : 'female',
        course : 'javascript',
        completed : false
 
        
    }
}

console.log(getInfo(5678));

원래라면 하나가 빠지면 오류가 나고 출력이 안됨

interface에 ?를 넣고 없애면 뺴고 출력됨

let std = {                   //변수를 사용하여 코드를 더 깔끔하게 바꿈
    stdId : 91012,
    sydName : 'lel',
    age : 30,
    gender : 'female',
    course : 'javascript',
    completed : false

}
function setInfo(student : Student) : void
{
    console.log(student);
}

setInfo(std);

 

변수를 사용하여 코드를 더욱 깔끔하게 만들었음

 

interface Student {
stdId : number;
stdName? : string;
age? : number;
gender? : string;
course? : string;
completed? : boolean;
//setName(name : string) : void;
setName : (name : string) => void;
//getName : () => string;
}

class MyStudent implements Student{    
    stdId = 91012;
    stdName = 'lel';
    age = 30;
    gender = 'female';
    course = 'javascript';
    completed = false;

    setName(name: string): void {
        this.stdName = name;
        console.log('이름 설정 :' + this.stdName) ;
    }

}
const myInstance = new MyStudent();
myInstance.setName('앨리스');

 

* 타입스크립트의 인터페이스가 자바스크립트에는 없음

  • 인터페이스는 런타임에는 영향 없음
  • tsc로 컴파일 시 JavaScript 파일에는 전혀 남지 않음
  • 오직 개발자 편의코드 안정성을 위해 존재하는 구조야

인터페이스 요약

  • 인터페이스는 'string'이나 'number'타입처럼 데이터 타입으로 사용가능
  • 선택적 프로퍼티로 지정하려면 속성값 뒤에 ?를 붙여준다.
  • 메소드도 인터페이스 내에서 선언 가능
  • 인터페이스를 클래스에 상속할 수 있다.
  • 사용자 정의 타입

열거형

// 열거형 : 사용자 정의 타입
enum GenderTYpe {
    Male = 'male',
    Female = 'Female',
    GenderNeutral = 2
}


let std = {
    stdId : 91012,
    stdName : 'lel',
    age : 32,
    gender : GenderTYpe.Female,
    course : 'javascript',
    completed : false

}
function setInfo(student : Student) : void
{
    console.log(student);
}

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함