: 자바스크립트의 타입을 강제시키는 언어
기존 자바스크립트와 달리 타입스크립트에서는 변수의 자료형을 지정해주기 때문에 문자열을 할당한 변수에 숫자열 등 다른 타입을 넣을 수는 없다.
예)
let hello:string = "hello" // 재할당이 문자열만 가능합니다. hello = "12345"
1. 에러의 사전 방지
자바스크립트는 타입이 엄격하지 않다.
변수의 변환이 자유롭다. 이게 혼자 할 때는 편해 보일 수 있지만, 실무에 가서 큰 서비스를 맡게될 때는 문제가 생길 수 있다.
밑에는 실제 사례이다.
💡 타입스크립트를 사용하지 않아 발생한 실제사례!
어떤 서비스에서 게시물을, 한 사람당 최대 5개까지 등록 가능하다는 조건을 걸어두었습니다.
그런데 한사람이 글을 5개 이상 작성한 것을 발견했고, 이유를 찾아보니 아래와 같았습니다.자바스크립트에서 다음과 같은 실수를 범한 것 이었습니다. ⇒ '0'(문자열) + 1 + 1 + 1 + 1 + 1
(결과: '011111')
즉 문자열과 숫자열이 더해져서 위와같은 결과가 나온 것 입니다. 우리는 여기서 알 수 있 듯, 실무에서 타입을 강제하는 것이 얼마나 중요한 일인지 알 수 있습니다.
따라서, 타입스크립트는 각 변수에 한개의 타입만 넣도록 해 안전성을 높여준다.
2. 코드 가이드 및 자동 완성(개발 생산성 향상)
코드를 작성할 때 개발 툴의 기능을 최대로 활용할 수 있다.
VSCode는 툴의 내부가 타입스크립트로 작성되어 있어, 타입스크립트 개발에 최적화되어 있다!
사용방법
// 변수에 타입을 지정해주시면 됩니다. let aaa : string = "안녕하세요" let bbb : number = 123
💡 객체 타입을 만들 때 가지는 네이밍 관례
→ interface의 I와 변수명 합치기
예시) 변수이름 : Profile이라면, 타입을 지정하는 객체는 IProfile이렇게 타입스크립트를 이용해서 각 변수에 타입을 지정해주고 나면, 타입에 맞지 않는 값을 할당할 때 에러가 나게 된다.
yarn add typescript --dev
: typescript 설치
yarn add @types/react@17.0.2
: 타입-리액트 설치
yarn add @types/node@17.0.2 --dev
: 타입-노드 설치
설치 후 package.json 확인 → dependencies / devDependencies로 나뉘어져 있음
- dependencies : 브라우저에 실행시에 필요한 목록
- devDependencies : vscode에서(개발시) 필요한 목록
💡 라이브러리 하위 모듈 버전 고정하기
사용하고 있는 외부 라이브러리가 의존하는 모듈의 특정 버전으로 고정시키고 싶을 경우
yarn 패키지 사용 시package.json
에 추가{ "devDependencies": { ... }, "resolutions": { "@types/react" : "17.0.2" }
설치를 다했으면, typescript 설정 파일(tsconfig.json)을 만들어준다.(내용은 비워두기)
그 상태에서
yarn dev
명령을 실행하게 되면, next.js가 typescript의 설정 파일인 tsconfig.json을 감지하고, 파일에 기본 설정을 자동으로 채워준다.tsconfig.json 파일에 내용이 생겼는지 확인하고, strict를 true로 바꿔준다.
💡 1. JSX(React의 HTML) 를 return 하는 컴포넌트 : tsx
2. 자바스크립트만사용하는 컴포넌트 : ts타입스크립트를 사용할 땐 위의 확장자를 잘 구분해서 사용해야 한다.
파일의 확장자를 바꾸면서 기존의 자바스크립트로 작성한 부분이 타입스크립트 영역으로 바뀌게 된다.
그래서 변수에 타입을 먼저 입히지 않고 할당을 하게되면 타입스크립트는 할당된 값의 자료형을 타입으로 추론 하게 된다.
/* 배열타입 */ // 문자열만 있는 배열 let aaa:string[] = ["원두","은정","혜원"] // 배열에 문자열과 숫자열을 같이 넣어두고 싶을 때 let fff:(string | number)[] = [1,2,3,"철수","영희"] // 모두 숫자이거나 모두 문자인 배열 let hhh: string[] | nuber[] =[ "영희","철수" ] hhh=[1,2,3] /* 객체타입 */ interface Ipropfile { name : string age : number school : string } const profile:Ipropfile = { name : "원두" age : 8 school : "코캠 초등학교" } //age의 타입이 문자열이거나 숫자열일 때 interface Ipropfile{ name : string age : string | number school : string } const profile:Ipropfile = { name : "원두" age : 8 or "8살" school : "코캠 초등학교" }
💡 타입스크립트에서는?
**또는 : |**
**그리고 : &
객체에서 해당 key에 value가 있으면 보내주고 싶다할 때!
→ ? 를 이용
? 는 ‘있으면’ 이라는 뜻**💡 props의 타입 지정은?
→ props도 객체, 따라서 객체에 타입을 지정해주는 것과 같이 해줄 수 있다.(예시 - props: any)