TS
- 자바스크립트의 슈퍼셋 프로그래밍 언어
- 정적 타입 (코드 작성 단계에서 타입 오류를 확인)
- 자바스크립트로 변환(컴파일)해야 브라우저나 node.js 환경에서 동작 가능
* JS: 동적 타입 (런타임에서 동작할 때 타입 오류 확인)
타입 종류
1) 문자
let str: string //값은 아직 없지만 이제 str에는 string 데이터만 할당 가능
let green: string = "Green" //큰따옴표 작은따옴표 템플릿 리터럴(``) 사용 가능
let yourColor: string = 'Your color is' + green
2) 숫자
let num: number
let integer: number = 6
let infinity: number = Infinity
let nan: number = NaN
3) 불린
let isDone: boolean = false
4) Null / Undefined
let nul: null
nul = null //null 타입 변수는 null만 받을 수 있음
let und: undefined //값을 명시하지 않으면 undefined가 들어감(사용을 위해서는 값 할당 필요)
5) 배열
const fruits: string[] = ['Apple', 'Banana', 'Cherry']
const numbers: number[] = [1, 2, 3, 4]
const union: (string|number)[] = ['Apple', 1, 2, 'Banana', 3]
6) 객체
const obj: object = {}
const arr: object = []
const func: object = function () {}
const userA: {
name: string
age: number
isValid: boolean
} = {
name: 'Cado',
age: 5,
isValid: true
}
인터페이스 파트에서 계속...
7) 함수
const add: (x:number, y:number) => number = function(x,y) {
return x+y
}
const a: number = add(1,2)
//함수 자체에서 타입 명시
const add = function(x:number, y:number): number {
return x+y
}
const hello: () => void = function() {
console.log('Hello World')
}
const h: void = hello()
8) Any
//아무 타입 데이터나 할당 가능
let hello: any = 'Hello world'
hello = 123
hello = false
9) Unknown
//어떤 데이터가 할당될지 알 수 없음
const u: unknown = 123
const any: any = u //any 타입에만 할당 가능
10) Tuple
//배열에서 아이템 개수까지 명시
const tuple: [string, number, boolean] = ['a', 1, false]
//배열 안의 아이템이 tuple 타입
const users: [number, string, boolean][]
= [[1,'Cado',true], [2,'Nana',false], [3,'Wich',true]]
11) Void
//return 키워드가 없는 함수에서 반환되는 데이터 타입
function hello(msg: string): void {
console.log(`hello ${msg}`)
}
12) Never
절대 발생하지 않을 값
13) Union
// 여러 타입을 버티컬바로 함께 지정
let union: string | number
14) Intersection
//객체 데이터의 속성을 하나로 통합
interface User {
name: string,
age: number
}
interface Validation {
isValid: boolean
}
const cado: User & Validation = {
name: 'Cado',
age: 5,
isValid: true
}
타입 추론(Inference)
- 타입을 명시하지 않아도 할당된 값을 통해 타입스크립트에서 타입을 추론해 지정
- 타입 추론 방법
1) 특정 데이터로 초기화된 변수
2) 기본값이 설정된 매개변수
3) 반환값이 있는 함수
타입 단언(Assertion)
단언 키워드: as
Non-null 단언 연산자: !
코드상의 오류는 없앨 수 있지만 실제 동작은 옳지 않은 방향일 수 있으므로 사용 시 주의 필요
//아래 상황에서 el은 html 요소이거나 null일 수 있음 -> 오류발생
//const el = document.querySelector('body')
//el.textContent = 'Hello world'
//타입 단언해주면 오류X
const el = document.querySelector('body') as HTMLBodyElement
el.textContent = 'Hello world'
//non-null 단연 연산자(!) 사용할 경우
//단 정말로 null이 들어가버리면 오류가 남 (코드상의 오류는 없지만...)
const el = document.querySelector('body')
el!.textContent = 'Hello world'
function getNumber(x: number | null | undefined) {
return Number(x!.toFixed(2))
}
//type guard
function getNumber(x: number | null | undefined) {
if(x) {
return Number(x.toFixed(2))
}
}
function getValue(x: string | number, isNumber: boolean) {
if(isNumber) {
return Number((x as number).toFixed(2))
}
return (x as string).toUpperCase()
}
getValue('hello world', false) //'HELLO WORLD'
getValue(3.1415926535, true) //3.14
할당 단언(Assertion)
//변수에 아무 값도 할당되지 않았지만 사용 가능
let num!: number
타입 가드(Guards)
function logText(el: Element) {
console.log(el.textContent)
}
//찾은 요소가 HTMLHeadingElement 클래스의 instance일 때만 함수 호출
const h1El = document.querySelector('h1')
if (h1El instanceof HTMLHeadingElement) {
logText(h1El)
}
'공부' 카테고리의 다른 글
리덕스 기초 (0) | 2024.02.06 |
---|---|
타입스크립트(TS) (3)함수, 클래스, 제네릭 (1) | 2024.01.28 |
타입스크립트(TS) (2) 인터페이스, 타입 별칭 (0) | 2024.01.28 |
Node.js, NPM 프로젝트 (0) | 2024.01.28 |
깃허브(GitHub) 버전관리 (0) | 2024.01.28 |