여 속성 체크의 한계 타입이 명시된 변수에 객체를 할당할 때 타입스크립트는 해당 타입의 속성이 있는지,그 외의 속성이 있는지 확인합니다. 위사진에손 Room 인터페이스에는 elephant 속성이 없기때문에 존재하지 않는다고 알려주고있습니다. 하지만 객체에 타입을 명시하지않고 obj객체에 타입을 할당해보면 에러가 나지않는걸 볼 수 있습니다. obj의 타입은 {numDoors:number,ceilingHeightFt:number,elephant:string} 으로 추론되며 obj 타입은 Room 타입의 부분집합을 포함하므로 Room에 할당 가능하며 타입 체커도 통과합니다. 즉 타입스크립트가 elephant 는 string 타입이라고 추론을 한 것입니다. 첫 사진엔 타입스크립트의 "잉여 속성 체크" 라는 과정..
타입 단언보다는 타입 선언을 사용하기 변수 alice 와 bob 의 타입은 Person 으로 동일합니다. 하지만 둘은 차이점이 있습니다. alice 는 타입 선언 이며 bob은 타입 단언을 수행합니다. 타입 선언은 할당되는 값이 해당 인터페이스를 만족하는지 검사합니다. 따라서 alice변수 는 name 속성이 없다고 타입스크립트가 알려주고있는것을 볼수있습니다. 하지만 타입단언을한 bob변수는 알려주지않는것을 볼수있습니다. 그이유는 타입 단언은 타입스크립트가 추론한타입이 있더라도 강제로 타입을 지정해주는것입니다. 따라서 타입체커가 오류를 발견했음에도 강제로 타입을 지정해주었기때문에 오류가 발생하지 않는것입니다. 타입 단언과 선언의 차이는 속성을 추가할 때도 마찬가지입니다. 이와같은이유로 타입 단언이 꼭 필..
타입스크립트의 타입 시스템 & 연산자는 두 타입의 인터섹션(교집합)을 계산합니다 Person 과 LifeSpan 인터페이스를 PersonSpan 이라는 타입으로 합친것 입니다. 위 사진에서 보시다시피 LifeSpan 인터페이스에 정의된 birth 가 없다고 에러가 나고있습니다. 즉 교집합중 하나라도 부족하면 타입스크립트는 이를 알려줍니다. &연산자보다 조금더 일반적으로 타입을 선언하는방법은 다음과 같습니다. extends의 의미는 "~에 할당 가능한" 또는 "~의 부분 집합" 이라는 의미입니다. 따라서 Person의 부분집합인 PersonSpan의 타입은 모두 name 속성을 가져야하며 birth 속성도 제대로 갖춰야 제대로된 부분집합이 완성이 됩니다. extends 키워드는 TypeScript에서 제네..
any를 지양해야하는 이유 보통 타입스크립트로 코딩을 하다보면 여기저기 오류가 막 발생하여 일단 에러를 없애기 위하여 any를 많이 사용합니다. 하지만 any 를 많이 사용하면 타입스크립트를 사용하는 의미가 퇴색되기때문에 any 만약 사용했다면 나중엔 다 고쳐줘야합니. 어떤 이유에서 any를 지양해야하는지를 오늘은 정리해보겠습니다. 1. any 타입은 안전성이 없습니다. age 변수에 처음 number 를 할당하였지만 any로 다시 타입을 지정한후 1을더해봤습니다. 13이 되길 원했지만 age는 "12" 즉 string타입이기때문에 121로 출력이 되는걸 확인할수있습니다. 타입체커는 처음 age를 number타입으로 판단하여 에러없이 진행할것이고 중간에 any로 다시 타입을 재할당했기때문에 이는 에러를 ..