일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 노마드코더
- js
- 객체지향프로그래밍
- 추상화
- github
- 리액트
- REACT
- 캡슐화
- 웹개발
- 타입스크립트
- 프론트엔드
- CSS
- 부트캠프
- 자바스트립트
- Props
- typeScript
- OOP
- Fetch
- 투두앱만들기
- 논리연산자
- webdevelopment
- 자바스크립트
- 클래스
- 패스트캠퍼스
- frontend
- 상속
- 불변성
- Hooks
- JavaScript
- Zustand
- Today
- Total
connecting dots
Typescript | 타입스크립트란 ?, Type System, Typescript 사용하는 이유 ?, Typescript 추가 제공 타입, type annotation/inference 본문
Typescript | 타입스크립트란 ?, Type System, Typescript 사용하는 이유 ?, Typescript 추가 제공 타입, type annotation/inference
dearsuhyun 2024. 7. 23. 15:24타입스크립트란 ?
자바스크립트에 타입을 부여한 언어
자바스크립트의 확장된 언어(super set) = 자바스크립트의 기능을 가지고 있고 + 그 외의 기능도 가짐
자바스크립트와는 달리 브라우저에서 실행하려면 파일을 한번 변환해주어야 함 --> 이 변환 과정을 컴파일(compile)이라고 함
Typescript: 정적타임(static) 또는 컴파일 타임. 코드 작성 단계에서 오류 확인
↓
Typescript Compiler
↓
Javascript: 동적타임(dynamic). 런타임에서 동작할 때 타입 오류 확인 (비교적 안정성이 높음)
Type System
개발 환경에서 에러를 잡는 걸 도와줌
type annotations를 사용해서 코드를 분석할 수 있음
오직 개발환경에서만 활성화됨
타입 스크립트와 성능 향상과는 관계가 없음
Typescript 사용하는 이유 ?
- 자바스크립트 코드를 단순화하여 더 쉽게 읽고 디버그 할 수 있도록 함
- 오픈소스임
- 정적 검사와 같음 js IDE 및 사례를 위한 매우 생산적인 개발 도구를 제공함
- 코드 이해가 쉬움
- ES6의 장점과 더 많은 생산성 제공
- 코드 유형 검사를 통해 자바스크립트를 작성할 때 개발자가 일반적으로 겪는 버그를 피하는데 도움이 될 수 있음
Type
그 value가 가지고 있는 프로퍼티나 함수를 추론할 수 있는 방법
"apple" | string 문자열 |
이것은 value인데 문자열이 가지는 프로퍼티, 메소드를 가지고 있는 value |
let string = "apple"
string.length
// 5
// 프로퍼티
// 문자열의 속성인 문자열의 길이 제공, 문자열 자체에는 아무것도 하지 않음
string.toUpperrCase()
// APPLE
// 메소드
// 문자열을 대문자로 변환. 문자열에 작업을 수행한 다음 반환
타입스크립트는 자바스크립트에서 기본으로 제공하는 기본제공유형을 상속함
1. Primitive types
string | 문자열 |
number | 숫자 값 |
boolean | true or false |
null | null이라는 하나의 값 |
undefined | undefined라는 하나의 값 초기화되지 않은 변수의 기본값 |
symbol | 고유한 상수 값 |
2. Object types
function | 함수 |
array | 배열 |
classes | 클래스 |
object | 객체 |
Typescript 추가 제공 타입
1. any
어플리케이션을 만들 때 잘 알지 못하는 타입을 표현해야 할수 있음. 이 값들은 사용자로부터 받은 데이터나 서드 파티 라이브러리 같은 동적인 컨텐츠에서 올 수 있음. 이 경우에는 타입 검사를 하지 않고 그 값들이 컴파일 시간에 검사를 통과하길 원함
--> 이 때 사용
but 최대한 쓰지 않는 것이 좋음. nolmplicitAny 옵션을 주면 any 사용시 오류 발생하게 할 수 있음
let sth: any = "hello world"
sth = 23;
sth = true;
let arr: any[] = ["john",212, true];
arr.push("smith");
console.log(arr) // ['john', 212, true, 'smith'];
2. union
변수 또는 함수 매개변수에 대해 둘 이상의 데이터 유형을 사용하는 것
let code: (string|number);
code = 123;
code = "abc"
code = false // compile error
let empId: string | number
empId = 111
empId = true // compile error
3. enum
값들의 집합을 명령하고 이를 사용하도록 만듬
enumerated type(열거형)
erun PrintMedia {
newspaper, // 0
newsletter, // 1
magazine, // 2
book // 3
}
let mediaType: number = PrintMedia.book // 3
--> 별도의 값이 설정되지 않은 경우 기본적으로 0부터 시작
erun PrintMedia {
newspaper = 1,
newsletter = 50,
magazine = 55,
book
}
let mediaType: number = PrintMedia.book // 56
--> 값이 할당되지 않은 아이템은 이전 아이템의 값에 + 1된 값이 설정됨
let type: strinf = PrintMedia(55) // magazine
--> 숫자 값을 통해 enum의 값이 멤버 이름을 도출할 수 있음
export enum LanguageCode {
korean = 'ko'
english = 'en'
japanese = 'ja'
chinese = 'zh'
spanish = 'es'
}
const code: LanguageCode = LanguageCode.english
--> 어떠한 언어 코드를 정의하는 코드를 사용할 때 언어의 집합을 만들때도 사용 가능 (가독성 향상)
cf. enum과 객체의 차이점
object은 코드 내에서 새로운 속성을 자유롭게 추가할 수 있디만, enum은 선언할 때 이외에는 변경 불가
onject의 속성 값은 js가 허용하는 모든 값이 올 수 있지만, enum의 속성값으로는 문자열 혹은 숫자만 허용
4. void
데이터가 없는 경우 사용됨
ex. 함수가 값을 반환하지 않으면 반환 유형으로 void 지정 가능
타입이 없는 상태, any와 반대의 의미
주로 함수의 리턴이 없을 때 사용
function sayHi(): void {
console.log('hi')
}
let speech:void = sayHi;
console.log(speech) // undefined
5. never
절대 발생하지 않을 값을 나타내는 새 타입
어떤 일이 절대 일어나지 않을 것이라고 확신할 때 사용
일반적으로 함수 리턴 타입으로 사용됨
--> 항상 오류를 리턴하거나 리턴 값을 제대로 내보내지 않음을 의미함 = 무한 루프에 빠지는 것과 같음
void와 never의 차이점
void는 값으로 undefined나 null 값을 가질 수 있지만
never는 어떠한 값도 가질 수 없음
let sth: void = null;
let nth: never = null // error
type annotation
개발자가 타입을 타입스크립트에게 직접 말해주는 것
const rate: number = 5 // number 타입 사용
type inference
타입스크립트가 알아서 타입을 추론하는 것
const rate = 5 // 타입을 알아서 추론
타입을 추론하지 못해서 꼭 type annotation을 해줘야 하는 경우
1. any 타입을 리턴하는 경우
JSON.parse --> string을 object로 바꿔주는 것이라 개발자는 예상할 수 있지만
타입스크립트는 이를 지원하지 않음. 리턴 타입이 일정하지 않으므로 any를 리턴한다고 추론해버림
따라서 이 경우에는 type annotation을 해주어야 함 !
const json: string = '{"x": 4, "y": 7}'
const coordinates = JSON.parse(json) // json string -> object (타입스크립트은 지원 안함), any
console.log(coordinates)
2. 변수 선언을 먼저하고 나중에 초기화하는 경우
변수 선언과 동시에 초기화하면 타입을 추론하지만, 선언 먼저하고 나중에 초기화하는 경우 추론이 안됨
let greeting
greeting = 'hello' // let greeting: any
3. 변수에 대입될 값이 일정하지 않은 경우
여러 타입이 지정되어야 할 때에는 | 로 여러 타입을 annotation 해줌
let num = [-7, -2, 10]
let numAboveZero: boolean | number = false
for (let i = 0; i < num.length; i++) {
if (num[i] > 0) {
numAboveZero = num[i]
}
}
'Online Class > DevCamp' 카테고리의 다른 글
React | 구조분해할당(Destructuring) (0) | 2024.07.26 |
---|---|
Typescript | 호출 시그니처(call signature), 인덱스 시그니처(index signature) (2) | 2024.07.23 |
React | React Hooks란 ? (0) | 2024.07.20 |
React - 예산 계산기 앱 만들기 | JSX Key 속성, filter 메소드, React State, super (props), state와 super (0) | 2024.07.19 |
React - 예산 계산기 앱 만들기 | Props(컴포넌트 간 데이터 전달), map(지출 목록 나열) (1) | 2024.07.17 |