Jieunnyμ λΈλ‘κ·Έ
[TS] ν¨μμ λ©μλ λ³Έλ¬Έ
π£ ν¨μ μ μΈλ¬Έ
π ν¨μ μ μΈλ¬Έ
Ⱐ맀κ°λ³μ, ν¨μ λ°νκ°μ νμ μ£Όμμ λΆμ΄λ νν
β° λ³μ λμλ λ¬λ¦¬ ν¨μμ 맀κ°λ³μ νμ κ³Ό λ°ν νμ μ μλ΅νλ κ²μ μ’μ§ μλ€!
function add(a: number, b: number): number {
return a + b
}
β 맀κ°λ³μμ μΈμ, μΈμ
βοΈ λ§€κ°λ³μ(paramater)
β° ν¨μ μ μΈλ¬Έμμ ν¨μ μ΄λ¦ λ€ κ΄νΈ μμ μ μΈνλ λ³μ
βοΈ μΈμ or μΈμ(argument)
β° ν¨μλ₯Ό νΈμΆν λ μ λ¬νλ κ°
π void νμ
β° κ°μ λ°ννμ§ μλ ν¨μλ λ°ν νμ μ΄ voidμ΄λ€.
function printMe(name: string, age: number): void {
console.log(...)
}
π ν¨μ μκ·Έλμ²
β° ν¨μμ νμ μ ν¨μ μκ·Έλμ²λΌκ³ νλ€.
let printMe: (string, number) => void = function(name: string, age: number): void {}
β° μ μ½λμμ ν¨μ μκ·Έλμ²λ (string, number) => void μ΄λ€.
Ⱐ맀κ°λ³μκ° μμΌλ©΄ λ¨μν ()λ‘ νννλ€.
π type ν€μλλ‘ νμ λ³μΉ λ§λ€κΈ°
β° type ν€μλλ κΈ°μ‘΄μ μ‘΄μ¬νλ νμ μΌλ₯΄ λ¨μν μ΄λ¦λ§ λ°κΏμ μ¬μ©ν μ μκ² ν΄μ€λ€.
type stringNumberFunc = (string, number) => void
let f: stringNumberFunc = function(a: string, b: number): void {}
// fλ stringNumberFunc νμ
μ΄κ³ , 맀κ°λ³μ aμ bλ₯Ό λ°κ³ μ무 κ°λ λ°ννμ§ μλλ€.
Ⱐ맀κ°λ³μμ κ°μλ νμ , λ°ν νμ μ΄ λ€λ₯Έ ν¨μλ₯Ό μ μΈνλ μλͺ»μ λ°©μ§ν μ μλ€.
π undefined κ΄λ ¨ μ£Όμ μ¬ν
interface INameable {
name: string
}
function getName(o: INameable) {return o.name}
let n = getName(undefined)
console.log(n)
β° getNameμ INameable νμ μ 맀κ°λ³μλ₯Ό μꡬνλ€.
β° undefinedλ μ΅νμ νμ μ΄λ―λ‘ INameableμ μμνλ μμ νμ μΌλ‘ κ°μ£Όν΄μ ꡬ문 μ€λ₯κ° λ°μνμ§ μλλ€.
β° νμ§λ§ o.nameμ΄ undefined.nameμ΄ λμ΄ μ€λ₯κ° λ°μνλ€.
β° μ΄λ₯Ό λ°©μ§νκΈ° μν΄μλ 맀κ°λ³μ κ°μ΄ undefinedμΈμ§ νλ³νλ μ½λλ₯Ό μμ±ν΄μΌ νλ€.
unterface IAgeable {
age?: number
}
function getAge(o: IAgeable) {
return o != undefined && o.age ? o.age : 0
// ageκ° μ ν μμ±μ΄λ―λ‘ μλ κ²½μ°λ μκ°ν΄μ€λ€.
}
π μ νμ 맀κ°λ³μ
β° ν¨μμ 맀κ°λ³μμλ μ΄λ¦ λ€μ λ¬Όμνλ₯Ό λΆμ΄λ μ νμ 맀κ°λ³μκ° μλ€.
function fn(arg1: string, arg?: number): void {}
// μ νμ 맀κ°λ³μκ° μλ ν¨μμ μκ·Έλμ²
type OptionalArgFunc = (string, number?) => void
π£ ν¨μ ννμ
π ν¨μλ κ°μ²΄λ€
let add2 = function(a, b) {return a + b}
β° μμ κ°μ ν¨μ μ μΈλ¬Έμμ ν¨μ μ΄λ¦μ μ μΈν 'function(a, b) {return a + b}' μ κ°μ μ½λλ₯Ό ν¨μ ννμ μ΄λΌκ³ νλ€.
π μΌλ± ν¨μ
β° μΌλ± ν¨μλ, ν¨μμ λ³μλ₯Ό ꡬλΆνμ§ μλλ€λ μλ―Έμ΄λ€.
let f = function(a, b) {return a + b}
f = function(a, b) {return a - b}
β° λ³μ fμ ν¨μ ννμμ μ μ₯ν μ μλ€.
β° fκ° λ³μμΈμ§ ν¨μμΈμ§ μ¬μ€μ ꡬλΆν μ μλ€.
π ννμ
β° ννμ : 리ν°λ΄, μ°μ°μ, λ³μ, ν¨μ νΈμΆ λ±μ΄ 볡ν©μ μΌλ‘ ꡬμ±λ μ½λ ννλ₯Ό μλ―Έ
β° ννμμ νμ μ»΄νμΌλ¬μ μν΄ κ³μ°λ²μ΄ μ μ©λμ΄ μ΄λ€ κ°μ΄ λλ€.
1 + 2 // ννμ
3 // μ»΄νμΌλ¬μ μν κ°
π κ³μ°λ²
β° μ»΄νμΌλ¬κ° 1+2 λΌλ ννμμ λ§λλ©΄ 'μ‘°κΈν κ³μ°λ²'μ μ μ©ν΄ 3μ΄λΌλ κ°μ λ§λ λ€.
β° function(a, b) {return a + b} λΌλ ν¨μ ννμμ λ§λλ©΄ aμ bκ° μ΄λ€ κ°μΈμ§ μ μ μμ΄μ 'λκΈν κ³μ°λ²'μ μ μ©ν΄ κ³μ°μ 보λ₯νλ€.
π ν¨μ νΈμΆ μ°μ°μ
β° μ΄λ€ λ³μκ° ν¨μ ννμμ λ΄κ³ μλ€λ©΄, λ³μ μ΄λ¦ λ€μ ν¨μ νΈμΆ μ°μ°μ () λ₯Ό λΆμ¬μ νΈμΆν μ μλ€.
β° ν¨μ νΈμΆ : ν¨μ ννμμ λͺΈν΅ λΆλΆμ μ€ννλ€λ λ»
let functionExpression = function(a, b) {return a + b}
let value = functionExpression(1, 2) // 3
β° ν¨μ νΈμΆλ¬Έμ λ§λλ©΄ λ―Έλ€λ ν¨μ ννμμ μ‘°κΈν κ³μ°λ²μ μ μ©ν΄ ν¨μ ννμμ κ°μΌλ‘ λ°κΎΌλ€.
π μ΅λͺ ν¨μ
let value = (function(a, b) {return a + b;})(1, 2)
β° ν¨μ νΈμΆ μ°μ°μλ μ°μ°μμ μ°μ μμκ° λ§€μ° λμΌλ―λ‘ ν¨μ ννμ λΆλΆμ μκ΄νΈλ‘ λ¬Άμ΄μ μ»΄νμΌλ¬κ° μ μμ μΌλ‘ ν¨μ ννμμ μμκ³Ό λ λΆλΆμ μ μ μκ² ν΄μΌνλ€.
β° μΌλ° ν¨μλ μ¬μ¬μ©μ±μ μν΄ μ¬μ©νλ λ°λ©΄μ, μ΅λͺ ν¨μλ λ³μμ λ°λ‘ ν¨μ νΈμΆ κ²°κ³Όλ₯Ό λ£μ΄μ€μΌλ‘μ¨ μ΅λͺ ν¨μμ μ¬μ©μ±μ 1νμ±μΌλ‘ λλλ€.
π const ν€μλμ ν¨μ ννμ
β° ν¨μ ννμμ let보λ€λ const ν€μλλ‘ μ μΈνλ κ²μ΄ μ’λ€.
π£ νμ΄ν ν¨μμ ννμ λ¬Έ
π νμ΄ν ν¨μ
// μ€κ΄νΈλ₯Ό μ¬μ©νλ μ€νλ¬Έ λ°©μ λͺΈν΅
const arrow1 = (a: number, b: number): number => {return a + b}
// μ€κ΄νΈλ₯Ό μλ΅νλ ννμ λ¬Έ λ°©μ λͺΈν΅
const arrow2 = (a: number, b: number): number => a + b
β° μ€κ΄νΈ μ¬μ© μ¬λΆμ λ°λΌ μ€νλ¬Έ λ°©μκ³Ό ννμ λ¬Έ λ°©μμΌλ‘ λλλ€.
π μ€νλ¬Έκ³Ό ννμ λ¬Έ
β° ESNextμ νμ μ€ν¬λ¦½νΈλ μ€νλ¬Έκ³Ό ννμ λ¬Έμ λμμ μ§μνλ€ -> λ€μ€ ν¨λ¬λ€μ μΈμ΄
β° μ€νλ¬Έ : CPUμμ μ€νλ§ λ λΏ κ²°κ³Όλ₯Ό μλ €μ£Όμ§ μλλ€ (리ν΄λ¬Έ νμ)
β° ννμ λ¬Έ: CPUμμ μ€νλ κ²°κ³Όλ₯Ό κ΅³μ΄ return ν€μλλ₯Ό μ¬μ©νμ§ μμλ μλ €μ€λ€ (리ν΄λ¬Έ νμX)
// λνμ μΈ μ€νλ¬Έ
let x
x = 1
β° λ³μ xμ κ° 1μ μ€μ νλ μμ λ§μΌλ‘ μΆ©λΆνλ€.
let x = 10
if(x > 0) x = 1
β° x > 0 λΆλΆμ CPUκ° νκ°ν ν trueλ false λΌλ κ°μΌλ‘ κ²°κ³Όλ₯Ό μλ €μ£Όμ§ μμΌλ©΄ ifλ¬Έμ΄ μ μμ μΌλ‘ λμν μ μλ€.
β° λκ°μ΄ CPUμμ μ€νλλ ꡬ문μ΄λλΌκ³ return ν€μλ μμ΄ κ²°κ³Όκ°μ λ°ννλ μ€νλ¬Έμ΄ νμνλ€ => ννμ λ¬Έ
π λ³΅ν© μ€νλ¬Έ
β° λ³΅ν© μ€νλ¬Έ : μ€κ΄νΈ{} λ₯Ό μ¬μ©ν΄μ μ¬λ¬ μ€μ μ€νλ¬Έμ ν κ° μ²λΌ μΈμνκ² νλ κ²
if(쑰건μ) {
μ€νλ¬Έ1
μ€νλ¬Έ2
}
π ν¨μ λͺΈν΅κ³Ό λ³΅ν© μ€νλ¬Έ
function f() {
let x = 1, y = 2
let result = x + y + 10
}
β° ν¨μλ λ°λμ λͺΈν΅μ μ€κ΄νΈ{} λ‘ κ°μΈμΌ νλλ°, μ΄κ²μ΄ λ°λ‘ λ³΅ν© μ€νλ¬Έμ΄λ€.
β° λ³΅ν© μ€νλ¬Έμ λ³μμ μ ν¨ λ²μλ μ§μ λ²μλ‘ μ ννλ―λ‘, κ° ν¨μμ λͺΈν΅μμλ§ μ ν¨νλ€.
π return ν€μλ
β° μ€νλ¬Έ κΈ°λ° μΈμ΄λ CPUμμ μ€νλ κ²°κ³Όλ₯Ό μλ €μ£Όμ§ μλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ return ν€μλλ₯Ό λμ νλ€.
β° return ν€μλλ ν¨μ λͺΈν΅μμλ§ μ¬μ©ν μ μλ€λ μ μ½μ΄ μλ€!
function isGreater(a: number, b: number): boolean {
return a > b // trueλ falseλ₯Ό λ°ννλ€.
}
π ννμ λ¬Έ μ€νμΌμ νμ΄ν ν¨μ ꡬν
const isGreater = (a: number, b: number): boolean => a > b
β° ν¨μ λͺΈν΅μ΄ ννμμΌλ‘ ꡬνλμκ³ , return ν€μλ λν μλ΅λμλ€.
β° return ν€μλλ₯Ό μ¬μ©νλ €λ©΄ νμ μ€κ΄νΈ{} λ‘ λ³΅ν© μ€νλ¬Έμ λ§λ λ€μ κ·Έ μμ μ¬μ©ν΄μΌ νλ€.
π ννμκ³Ό ννμ λ¬Έμ μ°¨μ΄
β° 'ννμ' μ΄λ μ©μ΄λ λ κ°μ§ ννλ‘ μ¬μ©νλλ°, μ΄ λμ ꡬλΆνκ³ μ 'ννμ(expression)'κ³Ό 'ννμ λ¬Έ(expression statement)'μΌλ‘ ꡬλΆν κ²μ΄λ€.
let a = 1, b = 0
if(a > b) console.log('a is greater than b')
const isGreater = (a: numver, b: number): boolean => a > b
β° 2νμ a > b μ½λλ ννμμΌλ‘, μ€νλ¬Έμ μΌλΆμΌ λΏ κ·Έ μμ²΄κ° μ€νλ¬ΈμΈ κ²μ μλλ€. (ννμ)
β° 3νμ a > b μ½λλ κ·Έ μμ²΄κ° μ€νλ¬Έ(statement)μ΄λ€. (ννμ λ¬Έ)
π μ€νλ¬Έμ λ§λλ μΈλ―Έμ½λ‘
β° ESNext μλ°μ€ν¬λ¦¬λΈ₯μ νμ μ€ν¬λ¦½νΈμμλ λ¬Έμ₯ λμ μΈλ―Έμ½λ‘ (;)μ μλ΅ν μ μλ€.
β° νμ§λ§ κ΄μ΅μ μΌλ‘, νμ μ€ν¬λ¦½νΈμμλ ννμ λ¬Έμλ μΈλ―Έμ½λ‘ μ λΆμ΄μ§ μλλ€.
π£ μΌλ± ν¨μ μ΄ν΄λ³΄κΈ°
π μ½λ°± ν¨μ
β° μΌλ± ν¨μ : λ³μμ ν λΉν μ μκ³ , λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬ν μ μμΌλ©°, λ€λ₯Έ ν¨μμ κ²°κ³Ό κ°μΌλ‘ λ°νλ μ μλ ν¨μ
β° μ½λ°± ν¨μ : λ§€κ° λ³μ ννλ‘ λμνλ ν¨μ
// fλ callback ν¨μλ₯Ό μΈμλ‘ λ°λ ν¨μ, λͺΈν΅μμλ callback ν¨μλ₯Ό μ€ννλ€.
const f = (callback: () => void): void => callback()
π μ€μ²© ν¨μ
β° ν¨μν μΈμ΄μμ, ν¨μλ λ³μμ λ΄κΈ΄ ν¨μ ννμ μ΄λ―λ‘ ν¨μ μμ λ λ€λ₯Έ ν¨μλ₯Ό μ€μ²©ν΄μ ꡬνν μ μλ€.
const calc = (value: number, cb: (number) => void): void => {
let add = (a, b) => a + b
functino multiply(a, b) {return a + b}
...
}
π κ³ μ°¨ ν¨μμ ν΄λ‘μ , κ·Έλ¦¬κ³ λΆλΆ ν¨μ
β° κ³ μ°¨ ν¨μ : λ λ€λ₯Έ ν¨μλ₯Ό λ°ννλ ν¨μ
const add1 = (a: number. b: number): number => a + b // λ³΄ν΅ ν¨μ
const add2 = (a: nubmer): (number) => number => (b: number): number => a + b // κ³ μ°¨ ν¨μ
export type NumberToNumberFunc = (number) => number
export const add = (a: number): NumberToNumberFunc => {
const _add: NumberToNumberFunc = (b: number): number => {
return a + b //ν΄λ‘μ
}
return _add
}
β° aλ addν¨μμ 맀κ°λ³μμ΄κ³ , bλ _add ν¨μμ 맀κ°λ³μλΌμ _add ν¨μμ κ΄μ μμ 보면 aλ μΈλΆμ μ μΈλ λ³μμ΄λ€.
β° μ΄μ κ°μ ννλ₯Ό 'ν΄λ‘μ ' λΌκ³ νλ€.
import {NumberToNumberFunc, add) from './add'
let fn: NumberToNumberFunc = add(1)
let result = fn(2)
let result2 = add(1)(2)
β° fnμ μμ§ κ°μ΄ μλ ν¨μμ΄λ©°, μ΄λ₯Ό 'λΆλΆ μ ν리μΌμ΄μ ' λλ 'λΆλΆ μ μ© ν¨μ' λΌκ³ λΆλ₯Έλ€.
β° fn κ°μ μμ λ³μλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ ν¨μ νΈμΆ μ°μ°μλ₯Ό λ κ° μ¬μ©ν΄μΌλ§ ν¨μκ° μλ κ°μ μ»μ μ μλ€.
π£ ν¨μ ꡬν κΈ°λ²
π 맀κ°λ³μ κΈ°λ³Έκ° μ§μ νκΈ°
β° λν΄νΈ 맀κ°λ³μ : ν¨μ νΈμΆ μ μΈμλ₯Ό μ λ¬νμ§ μλλΌλ 맀κ°λ³μμ μ΄λ€ κ°μ μ€μ νκ³ μΆλ€λ©΄ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ§μ ν μ μλ€.
const makePerson = {name: string, age: number = 10) : Person => {
...
}
π κ°μ²΄ μμ± μ κ° λΆλΆμ μλ΅ν μ μλ νμ μ€ν¬λ¦½νΈ ꡬ문
const makePerson = (name: string, age: number) => {
const person = {name, age} // {name: name, age: age}μ λ¨μΆ νν
}
π κ°μ²΄λ₯Ό λ°ννλ νμ΄ν ν¨μ λ§λ€κΈ°
export const makePerson = {name: string, age: number = 10): Person => ({name, age})
β° μ»΄νμΌλ¬κ° {}λ₯Ό λ³΅ν© μ€νλ¬Έμ΄ μλ κ°μ²΄λ‘ ν΄μνκ² νλ €λ©΄ κ°μ²΄λ₯Ό μκ΄νΈλ‘ κ°μΈμ£Όμ΄μΌ νλ€.
π μμΈ ν€μ κ°μΌλ‘ κ°μ²΄ λ§λ€κΈ°
β° κ°μ²΄μ μμ± μ΄λ¦μ λ³μλ‘ λ§λ€λ €κ³ ν λ μ¬μ©νλ€.
const makeObject = (key, value) => ({[key]: value})
makeObject('name', 'Jack');
makeObject('firstName', 'Jane')
β° {[key]: value} ννλ₯Ό 'μμΈ κ°λ₯ νμ ' μ΄λΌκ³ νλ€.
type KeyType = {
[key: string]: string
}
π£ ν΄λμ€ λ©μλ
π function ν¨μμ this ν€μλ
β° function ν€μλλ‘ λ§λ ν¨μλ Functionμ΄λ ν΄λμ€μ μΈμ€ν΄μ€, μ¦ ν¨μλ κ°μ²΄μ΄λ€.
β° μΈμ€ν΄μ€λ this ν€μλλ₯Ό μ¬μ©ν μ μμΌλ, νμ΄ν ν¨μμλ thisλ₯Ό μ¬μ©ν μ μλ€.
π λ©μλλ?
β° νμ μ€ν¬λ¦½νΈμμ λ©μλλ functionμΌλ‘ λ§λ ν¨μ ννμμ λ΄κ³ μλ μμ±μ΄λ€.
π ν΄λμ€ λ©μλ ꡬ문
β° ν¨μ ννμμ λ΄λ μμ±μ function ν€μλλ₯Ό μλ΅ν μ μκ² νλ λ¨μΆ ꡬ문μ μ 곡νλ€.
export class B {
constructor(public value: number = 1) {}
method(): void { // function ν€μλλ₯Ό μλ΅ν¨.
console.log(`value: ${this.value}`)
}
}
π μ μ λ©μλ
β° ν΄λμ€μ μμ±μ static μμ μλ₯Ό μμ± μμ λΆμ¬μ μ μ μΌλ‘ λ§λ€ μ μλ€.
β° λ©μλλ μμ±μ΄λ―λ‘ μ μ λ©μλλ‘ λ§λ€ μ μλ€.
export class C {
static whoAreYou(): string {
return `I'm class C`
}
}
export class D {
static whoAreYou(): string {
return `I'm class D`
}
}
C.whoAreYou() // ν΄λμ€μ΄λ¦.μ μ λ©μλ() ννλ‘ νΈμΆ
D.whoAreYou()
π λ©μλ 체μΈ
β° λ©μλ μ²΄μΈ : κ°μ²΄μ λ©μλλ₯Ό μ΄μ΄μ κ³μ νΈμΆνλ λ°©μμ μ½λ
β° νμ μ€ν¬λ¦½νΈλ‘ λ©μλ 체μΈμ ꡬννλ €λ©΄ λ©μλκ° νμ thisλ₯Ό λ°ννκ² ν΄μΌ νλ€.
export class calculator {
constructor(public value: number = 0) {}
add(value: number) {
this.value += value
return this
}
multiply(value: number) {
this.value *= value
return this
}
}
import {Calculator) from './method-chain'
let calc = new Calculator
let result = calc.add(1).add(2).multiply(4).multiply(4).value
console.log(result) // (0 + 1 + 2) * 3 * 4 = 36
'Study > TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TS] λ°λ³΅κΈ°μ μμ±κΈ° (0) | 2023.02.03 |
---|---|
[TS] λ°°μ΄κ³Ό νν (2) | 2023.02.02 |
[TS] κ°μ²΄μ νμ (2) | 2023.02.01 |
[TS] νμ μ€ν¬λ¦½νΈ νλ‘μ νΈ λ§λ€κΈ° (0) | 2023.01.30 |
[TS] 2. Usage (0) | 2023.01.27 |