20대부터 늦게전에 TS! 🏃♀️🏃♀️🏃♀️
흥민이형의 팬은 아니지만, TS 광고문구가 넘 맘에 들어서 써본다
올해 겨울쯤 삼성역에서 발견했던 이 광고.. 웃겨서 찍고 나니
벌써 20대의 끝자락이 절반이나 지나가버렸고.. 그래서 공부해본다 티에스 ㅠㅠ
TS에서의 타입은 number
, boolean
, string
, object
, null
, undefined
, symbol
, object
, array
, tuple
, enum
, any
, void
, never
, unknown
이 있다.
any : 어떤 타입도 삽가능수! TS 초심자들의 구원자 any. 그치만 any를 남발하는건 TS를 쓰는 의미가 없어지기 때문에 웬만하면 쓰지 말것
unknown : 이건 책에서 못 봤던 타입 같은데.. any랑 비슷하긴 한데 any와의 차이점은 사용할 때 타입을 쓰지 않으면 에러가 발생!
undefined : 초기 타입을 undefined로 설정해놓으면 다른 타입의 값을 대입할 수 없다. JS에서의 undefined와 헷갈리지 말 것!
let macaron; // -------> 200ok
const waffle; // ------> 에러
TS에서 let
을 쓰면 초기값을 생략해도 되지만, const
를 썼을 때 초기값 생략 시 에러가 난다.
const로 선언한 변수는 절대 값이 변하지 않기 때문쓰!!
이 부분이 이해되지 않는 분들이 있다면 var, let, const의 차이를 검색해보세요 💪 할수있어 빌리티!
let num: number = 2;
num='dooreplay';
처음에 변수에 타입을 지정했으면, 변수에 다른 값을 대입하더라도 타입은 지켜줘야 한다.
하지만, 위의 경우 숫자 타입인 num이라는 변수에 string 값을 대입했다.
이러면 에러 발생 🚓 🚓 ~~
let num: number = 2;
let str = 'Dooreplay';
위와 같은 자바스크립트 코드가 있다고 치자!
변수를 정의해주기 전에 :
과 함께 해당 변수의 타입이름을 써주는 것을 타입 주석(type annotaion)
이라고 한다.
근데 두번째 코드처럼 TS에서는 타입 이름을 생략할 수 있다.
이럴때 오른쪽 값을 분석해 왼쪽 변수의 타입을 결정하는 것을 타입 추론(type inference)
라고 한다.
꿀팁 한 가지 👉 RunJS 에서도 TS코드가 돌아간다)
아래의 코드를 예시로 살펴보자
interface Macaron {
flavour : string
price : number
}
// 200 ok
let Macaron = {
flavour : 'strawberry',
price : 3000
}
이렇게 하면 통과!
하.지.만 아래의 에러 사례들을 살펴보자.
let Macaron = {
flavour : 'strawberry'
} // -----> 삽에러쓰
let Macaron = {
price : 3000
} // -----> 삽에러쓰
let Macaron = {} // -------> 삽에러쓰
let Macaron = {
flavour : 'strawberry',
price : 3000,
ingredient : 'merigue'
} // ------> 삽에러쓰
😂 나만 헷갈리는 걸수도 있는데.. interface 내부 요소 쓴 다음에 ,나 ;를 찍어주고 싶어 죽겠다... 허전쓰
인터페이스 마지막 에러 사례를 보면 새롭게 추가된 속성이 있을 때 에러가 난다.
이러한 에러를 방지하기 위해 선택 속성(optional property)
을 추가할 수 있다.
선택 속성은 속성 이름 뒤에 물음표
를 붙여주도록 한다!
interface Macaron {
flavour : string
price : number
ingredient? : string
}
요렇게 하면 에러 방지 삽가능수!!
interface 키워드를 안 써도 인터페이스 만들기 삽가능수!
예시를 살펴보자.
let Macaron: {
flavour : string
price : number
ingredient? : string
} = {flavour: 'strawberry', price: 3000}
이러한 익명 인터페이스는 주로 함수를 구현할 때 사용한다고 한다~
let macaron: {
flavour: string;
price: number;
ingredient?: string;
} = { flavour: "strawberry", price: 3000, ingredient: "french meringue" };
const orderMenu = (dessert: {
flavour: string;
price: number;
ingredient?: string;
}) => {
console.log(
dessert.ingredient
? `${dessert.ingredient}로 만든 이 마카롱의 맛은 ${dessert.flavour}맛 이고, 가격은 ${dessert.price}원 입니다`
: "안알랴줌"
);
};
orderMenu(macaron);
Run JS도... Ts Playground도 콘솔 값이 안 찍혀서
급 ts 환경 세팅해서 콘솔창을 확인해보았다.
🚙 TS 환경 세팅하기
1. npm i typescript
2. test.tsx 파일 만들기
3. 터미널에 tsc test.tsx 입력하면 compiler에 의해 test.js 파일이 생김
4. node test.js 입력시 콘솔창이 나옴
여기서 한 가지 실수했던 것!
ingredient를 선택속성으로 두었는데도, 객체에서 빼니까 안알랴줌이 안 나온 것
생각해보니, tsx 파일을 바꿔도 js 파일은 그대로라서 node가 그렇게 받아들였던 것...!
ingredient 속성을 빼고 다시 tsc tsx파일이름
와 node js파일이름
을 입력하니 그제서야 안알랴줌이 나왔다!
😮 node에선 자동 컴파일이 안되지만, React 에선 자동으로 된다는 것!!(웹팩이 해준다고 한다)
일단 1편은 여기까지 하고 다음 편에 계속...
TS를 공부하면 할수록 아키텍처에 대해 연구해야 한다는 생각만 드는데..
우아한 테크러닝 신청해놓은 거 당첨됐으면 좋겠다 ㅠㅠㅠ
민태님 정말 뵙고싶네요... 😵
썸네일에 이글려 와 버렸어요..