1. 타입 스크립트는 타입을 명시하지 않아도 타입 체커가 알아서 타입을 추론해준다.
    함수 반환값과 같은 곳에도 추론 시킬 수 있지만 명시해주는 편이 좋다.

     

    ***

     

    2. object는 타입이 따로 존재하지 않고,

    let a : { } = {}

    위와 같은 구조에서 요소 타입을 선언하면 그게 object 타입과 같다.

    let a : { name : string, } = {}

    과 같이.

    따라서 type Player = { name : string, age?: number} 와 같은 선언은 type Player = object 대신 사용된 타입 선언이다.
    이를 alias 타입이라고 부른다.

     

    ***

     

    3. typescript에서 null이나 undefined 일 수 있을 때, 오류를 출력하는데
    이때 예외처리를 해주면 정상적으로 프로그램이 동작한다

     

    ***

     

    4. tuple이란 곧 여러가지 자료형이 있는 array이다. 요소마다 타입과 요소의 갯수까지 정해줄 수 있다.

     

    ***

     

    5. 타입을 모를 때는 any 보다는 unknown을 사용하라
    unknown을 사용하면 타입에 대한 예외처리를 해주어야 함. if (typeof a === "number"){} 과 같이

    + never은 반환하지 않을 때 사용하는 함수. try catch 같은걸로 함수를 빠져나가야 함.

     

    ***

     

    6. Call signature 는 함수 전체의 타입 선언과 같다

    타입스크립트에서 오버로딩은 call signature가 여러개 있을 때 타입에 맞춰서 발생함

     

    ***

     

    7. 다형성(polymorphism) 이란?

    하나의 타입에 여러 객체를 대입할 수 있는 성질과 같다.

    개인적으로 생각하기에, 타입 그 자체를 변수로 만드는 것과 같다.

    다형성이 없는 타입이란, number, string 등등으로 이들을 concreate 타입이라고 한다.

     

    generic이란 type의 placeholder 와 같다. placeholder가 무엇인가. input에서 아무것도 입력하지 않으면 기본적으로 보여주는 글자들이다.

     

    ex)

    <TypePlaceholder>( arr : TypePlaceholder[] ) : void

     

    위와 같이 써준 TypePlaceholder는 직접 사용해서 변수를 넣어 type을 정해주기 전까지는, 단순히 빈자리를 채워주는 용도이다.

     

    타입스크립트는 타입에 엄격하기 때문에, 타입에 유연하게 대처할 수 있도록 해주는 문법이 필요하며 그것들이 위에서 나오는 개념들이다.

     

    ***

     

    8.Class 의 constructor가 오는 부분에 멤버의 public, private를 결정짓는 코드 작성.

    추상 클래스(abstract) 내부에 작성할 수 있는 추상 메소드는 callsignature만 써줘야 한다. 그리고 상속받는 클래스들이 메소드를 구현해주어야 한다.

    접근지정자 중 protect는 외부에서는 사용할 수 없고, 상속받은 곳에서는 사용할 수 있도록한다.

    기본으로 주어지는 접근지정자는 모두 public

     

    ***

     

    9. 해시맵

    해싱 알고리즘에 사용되는 해시맵.

    python의 dict 자료형이랑 유사하게 key와 그에 대응하는 값으로 이루어져 있다.

    type Words = {
    	[whatever: string] : string;
    }

    과 같은 형식으로 사용된다.

     

    ***

     

    10. 타입스크립트에서는 클래스를 타입처럼 사용 가능하다 + 클래스를 사용해서 dictionary 만들기 예시

    type Word_T = {
        [key:string] : string;
    }
    
    class Dict {
        private words: Word_T;
    
        constructor(){
            this.words = {}
        }
    
        add(input:Word){
            //존재하지 않는 단어이면
            if(this.words[input.term] === undefined){
    
                //key 입력과 함께 def 입력까지 해준다.
                this.words[input.term] = input.def
            }
        }
    
        get_D(term:string){
            return( this.words[term] );
        }
    
        delete_D(term:string){
            delete this.words[term];
        }
    
        update_D(input:Word){
            //없으면 그냥 추가
            if(this.words[input.term] === undefined){
                this.add(input)
            }
            //존재하면
            else{
                this.words[input.term] = input.def;
            }
        }
    
        showAll_D(){
            let keyArr = Object.keys(this.words);
            keyArr.forEach(e => console.log(e));
        }
    
        count_D(){
            let keyArr = Object.keys(this.words);
            return keyArr.length
        }
    }
    
    class Word {
        constructor(
            public term: string,
            public def: string  
        ){}
    }

     

    ***

     

    11. 제네릭 타입을 함수 내에서 다른 함수의 인자로 넘길 수 있음.

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기