타입스크립트 문법 정리
1) 타입가드는 타입추론을 명확하게 하기 위해 사용한다. 심화) 타입추론을 위해 is문법을 사용 할 수있다.
interface A = {a: string}
interface B = {b: string}
const a:A | B = {a: "a"}
// 타입 A인지 판단해보겠다.
const aOrB = (parameter:A | B): parameter is A => {
//해당 객체가 b라는 속성을 가지고 있냐?
//가지고 있으면 B타입이라는 말니까 false
//그외에는 A라는 타입이니까 true
if((parameter as A).b) {
return false
} else {
return true
}
}
const printAOrB = (parameter: A | B):void => {
if(aOrB(a)) {
console.log("a입니다.")
} else {
console.log("b입니다.")
}
}
2) {},Object,object 그리고 unknown
내가 지금 강의를 듣고잇는 타입스크립트 4.8v 기준으로 새로 생긴 개념들이라고 한다.
{}과 Object의 경우는 null,undifined를 제외한 모든타입이다.
any보단 낫지만 지양하는게 좋을듯?
주의해야할게 object <<가 객체 타입이고 Object와{}는 객체 타입을 뜻하는게 아니다!
그리고 unknown의 경우는 원래는 단일타입이었지만 4.8기준으로
unknown === {} | null | undifined
if(a) {
a << {}
} else {
a << null or undifined
}
3) 인덱스 시그니처와 맵드 타일
어떤 객체가 있다고 가정하다. 해당 객체의 key,value들의 타입은 서로 같지만
그 key,value가 무수히 많다고 생각하면 일일이 타입을 지정하는것은 끔찍한 일이다.
그럴때 사용하는것이 인덱스 시그니처이다.
type A = {
[key:string]: number
}
or
interface A {
[key:string]: number
}
const a:A = {a: 5, b: 6, c: 7} ok.
어떤 객체의 key를 텍스트 리터럴 타입으로 지정해줄수 있다.
이때 이용하는것이 맵드 타일이다.
type A = "a" | "b" | "c"
type B = {
[key in A]:A //이러면 키밸류 타입이 a가된다. 밸류 타입을 직접 지정해주고싶으면 value타입만 적으면 됨
}
or
interface IA = {
types:"a" | "b" | "c"
}
type B = {
[key in IA["types"]:IA[types]
}