πŸ’» Typescript

waterglassesΒ·2022λ…„ 6μ›” 24일
0

TIL

λͺ©λ‘ 보기
33/50
post-thumbnail

⚠️ μ •λ¦¬ν•œ λ‚΄μš©μ€ μ˜€νƒ€λ‚˜ 잘λͺ»λœ 정보가 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ“κΈ€λ‘œ μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈ 문법

1. νƒ€μž… 주석과 νƒ€μž… μΆ”λ‘ 

  • νƒ€μž… 주석: λ³€μˆ˜, μƒμˆ˜ ν˜Ήμ€ λ°˜ν™˜ 값이 무슨 μ°¨μž…μΈμ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것을 의미
  • νƒ€μž… μΆ”λ‘ : ν•΄λ‹Ή λ³€μˆ˜κ°€ μ–΄λ–€ νƒ€μž…μΈμ§€ μΆ”λ‘ ν•˜λŠ” 것, μƒλž΅ν•˜λ©΄ 컴파일 νƒ€μž„μ— μ•Œμ•„λ‚Έλ‹€.
let a: number = 1
let b = 2
let c: boolean = false
let d: string = 'TypeScript'
let f = { a: 1 }
f.a = 2
f.b = 3 // λΆˆκ°€λŠ₯

let f: number[] = []
h.push(1) // κ°€λŠ₯
h.push('a') // λΆˆκ°€λŠ₯

let i: 'good' : 'good' // iλΌλŠ” λ³€μˆ˜λŠ” good만 κ°€λŠ₯ν•˜λ‹€.
let g: any = 3 //jsμ—μ„œ ν–ˆλ“―μ΄ 아무 κ°’μ΄λ‚˜ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

function add(a: number, b: number): number {
  return a + b
}
console.log(add(1,3)) // 4

2. μΈν„°νŽ˜μ΄μŠ€

  • 객체의 νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방법.
  • interfaceλΌλŠ” ν‚€μ›Œλ“œλ‘œ κ°€λŠ₯ν•˜λ‹€.
interface Company {
  name: string
  age: number
  address?: string // ?λ₯Ό 뢙이면 선택 속성이 됨 (optional이라 뢀름)
}

const kakao: Company = {
  name: 'kakao',
  age: 10,
  address: 'Seoul', // μ•ˆ 넣어도 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠμŒ(?λ₯Ό λΆ™μ—¬μ„œ)
}
console.log(kakao) // 정상 좜λ ₯

// 읡λͺ… μΈν„°νŽ˜μ΄μŠ€
const person: {
  name: string
  age?: number
} = {
  name: 'Sugyeong',
  age: 100,
}

3. tuple

  • 배열을 tuple둜 μ΄μš©ν•˜λŠ” 방법
const tuple: [string, number] = ['Sugyeong', 100]
console.log(tuple) // ['Sugyeong', 100]

4. enum

  • μ—΄κ±°ν˜•μ„ μ‚¬μš©
enum Color {
  RED,
  GREEN,
  BLUE,
}

const color = Color.BLUE
// if(color === Color.BLUE ){

// }
enum Color {
  RED = 'red',
  GREEN = 'green',
  BLUE = 'blue',
}

5. λŒ€μˆ˜ νƒ€μž…

  • μ—¬λŸ¬ μžλ£Œν˜•μ˜ 값을 κ°€μ§ˆ 수 있게 ν•˜λŠ” 방법
  • 합집합 νƒ€μž…κ³Ό ꡐ집합 νƒ€μž…μ΄ μžˆλ‹€.
let numOrStr: number | string = 1 // number ν˜Ήμ€ string이 λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

let numAndStr: number & string = '' // μ›μ‹œ νƒ€μž…μ—μ„œ μ‚¬μš©ν•  μˆ˜λŠ” μ—†λ‹€.

interface Name {
  name: string
}

interface Age {
  age: string
}

let sunhyoup: Name & Age = {
  // 값을 λ‘˜ λ‹€ λ„£μ–΄μ€˜μ•Όν•¨
  name: 'Sugyeong',
  age: 100,
}

type Person = Name & Age
let julia: Person = {
  name: 'julia',
  age: 100,
}

6. Optional

  • ES 2021에도 μΆ”κ°€λœ κΈ°λŠ₯, νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 이미 μžˆμ—ˆλ‹€.
interface Post {
  title: string
  content: string
}

interface ResponseData {
  post?: Post
  message?: string
  status: number
}

const response: ResponseData[] = [
  {
    post: {
      title: 'Hello',
      content: 'Hi~'
    },
    status: 200
  },
  {
    message: 'Error!'
    status: 500
  }
]

console.log(response[0].post.title) // Hello
console.log(response[1].post?.title) // 데이터가 μ—†λ‹€λ©΄ μžλ™μœΌλ‘œ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

7. Generic

  • ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ—¬λŸ¬ νƒ€μž…μ„ μ΄μš©ν•  수 있게 ν•˜λŠ” 방법
interface Value<T> {
  value: T
}

const value: Value<number> = {
  value: 1,
}

const value: Value<string> = {
  value: '1',
}

function toString<T>(a: T): string {
  return `${a}`
}

console.log(toString<string>('5'))

8. Partial, Required, Pick, Omit

  • κΈ°μ‘΄ interfaceλ₯Ό μž¬ν™œμš© ν•  수 있게 λ§Œλ“ λ‹€.
interface User {
  id: number
  name: string
  age: number
  address: string
  createAt?: string
  updateAt?: string
}

// λͺ¨λ“  ν•„λ“œκ°€ Optional이 λœλ‹€.
const partial: Partial<User> = {}

// λͺ¨λ“  ν•„λ“œκ°€ Requiredκ°€ λœλ‹€.
const required: Required<User> = {
  id: 1
  name: 'Lee'
  age: 10
  address: 'Seoul'
  createAt: '',
  updateAt: ''
}

// νŠΉμ • ν•„λ“œλ§Œ κ³¨λΌμ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
const pick: Pick<User, 'name' | 'age'> = {
  name: ''
  age: '10'
}

// νŠΉμ • ν•„λ“œλ§Œ λΉΌκ³  μ‚¬μš©ν•  수 μžˆλ‹€.
const omit: Omit<User, 'id' | 'createAt' | 'updateAt'> = {
  name: ''
  age: '10'
  address: 'Seoul'
}

//
const mixed: Omit<User, 'id' | 'address' | 'age' | 'createAt' | 'updateAt'> & Pick<Partial<User>, 'address' | 'age'> = {
  name: ''
}

9. extends

  • νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν•  수 μžˆλ‹€.
interface Time {
  hour: number
  minute: number
  second: number
}

interface DateTime extends Time {
  year: number
  month: number
  day: number
}

interface OffsetDateTime extends DateTime {
  offset: number
}

interface OffsetDateTime extends DateTime {
  zoneId: string
}

interface TimeFormat extends Pick<Time, 'hour' | 'minute'> {
  ampm: 'am' | 'pm'
}

const timeFormat: TimeFormat = {
  hour: 10
  minute: 30
  ampm: 'am'
}

πŸ”₯ λŠλ‚€μ 

쀑간 ν”„λ‘œμ νŠΈκ°€ λλ‚˜κ³  λ°”λ‘œ λ‹€μŒλ‚ λΆ€ν„° λ‹€μ‹œ κ°•μ˜λ“£λŠ” 삢을 μ‹œμž‘ν•˜μ˜€λ‹€πŸ₯² μ˜€λŠ˜μ€ typescript에 λŒ€ν•΄μ„œ λ°°μ› λŠ”λ° 아직 μ’€ λ¨Ό μ–˜κΈ°λ‘œ λ“€λ Έλ‹€.

μ΄λŸ°μ‹μœΌλ‘œ μ •μ˜ν•˜κ³  μ‚¬μš©ν•˜λŠ” κ±°μ˜€κ΅¬λ‚˜~라고 인지정도 ν•œ 것 κ°™λ‹€. 자주 μ¨κ°€λ©΄μ„œ μ΅μˆ™ν•΄μ§€λ„λ‘ λ…Έλ ₯해야지! μ•„μžμ•„μž!!

Refer

profile
맀 μˆœκ°„ μ„±μž₯ν•˜λŠ” κ°œλ°œμžκ°€ 되렀고 λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€