타입스크립트에 대해 알고는 있지만 기초 지식이 부족하다 생각했다.
그러던 중 노마드 코더 타입스크립트 강의를 듣게 되었는데
공부하는데 많은 도움이 되었고 내가 사용하고 있는 타입들을 왜 사용하는지 알게 된 계기가 되었다.
let b = []
// 빈 배열인 경우 타입스크립트는 추론하기 어렵다.
let b = number[] = []
b.push(‘Hi’)
// 오류: b 배열에 ‘Hi’라는 string을 할당할 수 없다.
let a = ‘hello’
// let a: string
a = 1
// Type ‘number’ is not assignable to type ‘string’
const player : {
name: string,
age?: number,
} = {
name: ‘jieun’
}
if(player.age < 10){ }
// 에러: age는 undefind 일 수 있다.
if(player.age && player.age < 10){ }
// &&를 사용해 age가 먼저 있는지 확인해 준다.
age
를 선택적으로 하고 싶을 경우 ?
를 :
앞에 붙여준다. (옵셔널 파라미터)타입 가드(Type Guard)
를 해준다.❗️ Type Guard (타입 가드)
- 컴파일러가 타입을 예측할 수 있도록 코드를 작성해서 버그가 발생하지 않도록 예방하는 방법
- 조건문에서 객체의 타입을 좁혀나갈 수 있습니다.
참고 하기 좋은 내용
https://radlohead.gitbook.io/typescript-deep-dive/type-system/typeguard
https://ibocon.tistory.com/261
❗️
?
단축어
?
는 단축어로 [해당 타입]이거나 undefind라고 해주는 것과 동일하다.- 자바스크립트 옵셔널 체이닝과 같은 맥락이라 볼 수 있을 것 같다.
age: number | undefind age?: number // number | undefind를 ?으로 단축할 수 있다. age?: number | undefind // 이렇게 사용할 필요가 없다는 뜻 (코드 리팩토링해야겠다...)
const playerJieun : {
name: string,
age?: number,
} = {
name: ‘jieun’
}
const playerColl : {
name: string,
age?: number,
} = {
name: ‘coll’
}
Alias(별칭)
타입으로 재사용성을 높힌다.// 첫글자는 대문자로 해줘야한다.
type Player = {
name: string,
age?: number,
}
const jieun : Player = {
name: ‘jieun’,
}
const coll : Player = {
name: ‘coll’,
age: 20,
}
// 만약 age라는 값이 다른 곳에서 사용할 경우 Age라는 별칭을 생성해 재사용성을 높힐 수 있다.
// 단, 이런식으로 과하게 재사용하는건 좋지 않다.(개발자가 유통성있게 사용해야한다.)
type Age = number;
type Player = {
name: string,
age?: Age,
}
// 일반 함수
function playerMaker(name: string): Player {
return {name}
}
// 화살표 함수
const playerMaker = (name: string): Player = > (
{name}
)
const(상수)
와 유사하다.type Player = {
// name은 읽기전용
readonly name: string,
age?: number,
}
const jieun : Player = {
name: ‘jieun’,
}
player.name = ‘choi’// 에러
const numbers: readonly number[] = [1, 2, 3]
numbers.push(1) // 에러
// filter, map 등의 경우 값을 건들지 않기 때문에 에러가 생기지 않는다.
const player: [string, number, boolean] = [‘jieun’, 1 , true]
player[0] = 1
// 오류 발생
// 0번째 인덱스에는 string만 올 수 있다.
const player: readonly [string, number, boolean] = [‘jieun’, 1 , true]
// Tuple과 readonly를 합칠 수도 있다.
// undefined
// 옵셔널로 사용 가능 '?'
let a: undefined = undefined
//null
let a: null = null
let a: any = []
const a: any[] = [1, 2, 3]
const b: any = true
a + b // 오류가 나지 않는다.
let a: unknown
let b = a + 1 // 에러 발생 (타입확인 필요하다.)
// 사용할 때 마다 변수 타입을 지정해야한다.
if(typeof a === 'number'){
let b = a + 1
}
if(typeof a === 'string'){
let b = a.toUpperCase()
}
// 타입스크립트는 해당 함수의 반환값을 void로 추론한다.
function hello(){
console.log(‘hi’) // function hello():void
}
// 1.함수에서 exception(예외)발생할 경우
function hello(): never {
return ‘hello’ // 에러
}
function fail(msg: string): never {
throw new Error(msg); // 에러나지 않음
}
// 2. 타입이 두가지 일 수도 있는 경우
function hello(name: string | number) {
if(typeof name === ‘string’) {
name // name: string
}
else if(typeof name === ‘number’) {
name // name: number
}
else {
name // name: never
//두 타입 모두 확인했기 때문에 해당 영역은 절대 실행되면 안된다.
}
}
하나의 섹션에서 이미 알고 있던 것도 있었지만
알고 있었지만 왜 사용하지는, 왜 사용하면 안 되는지 알 수 있었다.
그리고 사용 예시도 같이 알려줘서 이해하는데 도움이 되었다.
강의 영상
https://nomadcoders.co/typescript-for-beginners/lectures/3668