[TIL] 221029-30

BeanxxΒ·2022λ…„ 10μ›” 30일
0

TIL

λͺ©λ‘ 보기
87/120
post-thumbnail

πŸ”₯ 였늘 ν•œ 일

  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ Lv.0 8문제 μ™„λ£Œ
  • [Toy-project: GoStreet]
    • CRUD, Image Upload λΆ€λΆ„ 정리 & λΈ”λ‘œκΉ…
    • 둜그인 & νšŒμ›κ°€μž…, λŒ“κΈ€ CRUD, Heroku 배포
  • [Udemy React] Section27(React + TypeScript) κΈ°λ³Έ 문법 & 기초 μ„ΈνŒ… ν•™μŠ΅

🧚 μƒˆλ‘­κ²Œ μ•Œκ²Œ 된 λ‚΄μš©

πŸ’« TypeScript

npm install typescript

# typescript μ‹€ν–‰
npx tsc
# error -> νƒ€μŠ€ ꡬ성 νŒŒμΌμ„ ν”„λ‘œμ νŠΈ 폴더에 μΆ”κ°€ν•΄μ„œ νƒ€μŠ€μ—κ²Œ μ»΄νŒŒμΌν•  νŒŒμΌμ„ μ•Œλ €μ€˜μ•Ό 함

npx tsc [μ»΄νŒŒμΌν•  파일λͺ…]

# React + TS ν”Œμ  생성 
npx create-react-app [ν”„λ‘œμ νŠΈλͺ…] --template typescript

πŸ”— [참고자료] Adding TypeScript | Create React App


// type은 μ†Œλ¬Έμžλ‘œ 지정!

// [μˆ«μžν˜•]
let age: number;
age = 12;

let ages: number = 12;

// [λ¬Έμžν˜•]
let userName: string;
userName = 'Max';

// [Boolean]
let isInstructor: boolean;
isInstructor = true;

// [Array]
let hobbies: string[]; // λ¬Έμžν˜• λ°°μ—΄
hobbies = ['Sprots', 'Cooking'];

// [Object]
let person: {
  name: string;
  age: number
};

person = {
  name: 'Max',
  age: 20
}

// 객체λ₯Ό μ—¬λŸ¬ 개 가진 λ°°μ—΄
let people: {
  name: string;
  age: number
}[];

// [Type inference(νƒ€μž… μΆ”λ‘ )]
// λ¬Έμžμ—΄ νƒ€μž…μ„ μΆ”λ‘ ν•˜μ—¬ λ‹€λ₯Έ νƒ€μž…μ΄ 였면 error 
// -> 가급적 :string와 같이 νƒ€μž… 지정 μ•ˆν•˜κ³  νƒ€μž… μΆ”λ‘  μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹μŒ~
let str = 'Happy Halloween!';
// str = 123; <- error

// [Union Type]: νƒ€μž… μ •μ˜μ‹œ 1개 μ΄μƒμ˜ νƒ€μž… μ‚¬μš© κ°€λŠ₯ 
let str1: string | number = 'Happy Halloween!';
str1 = 123;

// [Type Aliases] -> μ½”λ“œ κ°„κ²°, 관리 easy
// λ°˜λ³΅ν•΄μ„œ μ‚¬μš© κ°€λŠ₯
type Person = {
  name: string;
  age: number;
}

let person1: Person;
let people1: Person[];

// [Functions & types]
// 맀개 λ³€μˆ˜ νƒ€μž…λΏλ§Œ μ•„λ‹ˆλΌ λ°˜ν™˜ νƒ€μž…λ„ 생각해야 ν•œλ‹·
function add(a: number, b: number): number {
  return a + b;
}

function printOutput(value: any) {
  console.log(value)
}

// return문이 μ—†μ–΄μ„œ type이 void둜 νƒ€μž… 좔둠됨
// void: null, undefined와 λΉ„μŠ·ν•˜μ§€λ§Œ 항상 ν•¨μˆ˜μ™€ κ²°ν•©ν•΄μ„œ μ‚¬μš©!


// [Generics] => μœ μ—°μ„±, νƒ€μž… μ•ˆμ •μ„± μΈ‘λ©΄μ—μ„œ κ΅³~
// κΈ°μ‘΄ 배열은 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ κ°’ μΆ”κ°€ κ°€λŠ₯ 
function insertAtBeginning<T>(array: T[], value: T) {
  const newArray = [value, ...array];
  return newArray;
}
// ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜λ“€μ„ any type으둜 μ§€μ •ν•΄μ€˜μ„œ 이λ₯Ό 가지고 λ§Œλ“€μ–΄μ§„ λ°°μ—΄ λ‚΄μ˜ 값을 νƒ€μŠ€λ‘œ νƒ€μž…μ„ 검사할 수 μ—†μŒ
// 즉, 이후엔 νƒ€μŠ€μ˜ κΈ°λŠ₯을 μžƒμ–΄λ²„λ¦° μ…ˆ,,
// Solution: μ œλ„€λ¦­ νƒ€μž… μ„€μ •ν•΄μ£ΌκΈ°!! ex. <T>
// => μ œλ„€λ¦­ νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ νƒ€μŠ€μ—κ²Œ any type이 μ•„λ‹ˆλž€ 것을 μ•Œλ €μ€¬κΈ° λ•Œλ¬Έμ— 이후에 λ°°μ—΄ 내에 숫자 νƒ€μž…μΈμ§€ λ“±μ˜ νƒ€μž… 검사가 κ°€λŠ₯해짐!

const demoArray = [1, 2, 3];
const updatedArray = insertAtBeginning(demoArray, -1);  // [-1, 1, 2, 3] 

// updatedArray[0].split(''); <- error
// why error? updatedArray[0]λŠ” μˆ«μžνƒ€μž…μ΄λž€κ±Έ μΆ”λ‘ ν•΄λƒˆκ³ , split() λ©”μ„œλ“œλŠ” μˆ«μžμ— μ‚¬μš© λΆˆκ°€ν•˜λ―€λ‘œ


// μ•„λž˜ 두 caseλŠ” 같은 μ½”λ“œ
// let numbers: number[] = [1, 2, 3];
// let numbers: Array<number> = [1, 2, 3];
profile
FE developer

0개의 λŒ“κΈ€