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. 제네릭 타입을 함수 내에서 다른 함수의 인자로 넘길 수 있음.
'텍스트 어드벤처 게임 프로젝트 > typescript' 카테고리의 다른 글
타입스크립트 타입 정의의 모든것 (0) | 2023.05.13 |
---|---|
3 typescript로 NodeJS를 사용할 때 (0) | 2023.03.15 |
2 타입 정의와 라이브러리 + 모듈이 없는 경우 (0) | 2023.03.08 |
1 typescript의 생성자 초기화에 관한 질문 (0) | 2023.03.07 |
0 공부하는 이유 (0) | 2022.09.21 |