Quick Start Typescript ~ 6์žฅ ์ •๋ฆฌ

์นดํƒˆ๋กœ๊ทธ
  1. 1. 6์žฅ ํ•จ์ˆ˜ ๋ชฉ์ฐจ
  2. 2. ๐Ÿ“p151. ํ•จ์ˆ˜ (Js vs Ts ๋น„๊ต)
    1. 2.1. js์˜ ๊ฒฝ์šฐ
      1. 2.1.1. ๊ฒฐ๊ณผ
    2. 2.2. ts์˜ ๊ฒฝ์šฐ
      1. 2.2.1. ๊ฒฐ๊ณผ
  3. 3. ๐Ÿ“p156. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ดˆ๊ธฐ๊ฐ’
    1. 3.1. ES6 ์ด์ „
    2. 3.2. ES6 ์ดํ›„
  4. 4. ๐Ÿ“p159. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜
    1. 4.1. ES6 ์ด์ „
    2. 4.2. ES6 ์ดํ›„
    3. 4.3. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ง€์ •๋ฒ•
  5. 5. ๐Ÿ“p162. ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜
    1. 5.1. js์˜ ๊ฒฝ์šฐ
    2. 5.2. ts
  6. 6. ๐Ÿ“p164. ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ
  7. 7. ๐Ÿ“p170. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์œ ์˜์ 
  8. 8. ๐Ÿ“p171. filter, reduce
  9. 9. ๐Ÿ“p173. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์„ ์–ธ
    1. 9.1. Typescript์—์„œ this ํƒ€์ž… ์„ ์–ธ
  10. 10. ๐Ÿ“p177. type ๋ช…๋ช…๋ฒ•
  11. 11. ๐Ÿ“p179. jquery -> VanillaJS
    1. 11.1. Jquery
    2. 11.2. js
  12. 12. ๐Ÿ“ 180. ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ(ex. Chrome API)

๐Ÿ“– Quick Start Typescript ์„ ์ฝ๊ณ , ๊ฐ„๋‹จํžˆ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์ด๋‚˜ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋ถ€๋ถ„์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

6์žฅ ํ•จ์ˆ˜ ๋ชฉ์ฐจ

  1. ์‚ฌ์šฉ๋ฒ• (Js vs Ts ๋น„๊ต)
  2. ๋งค๊ฐœ๋ณ€์ˆ˜
    1. ์ดˆ๊ธฐ๊ฐ’ ์ง€์ •
    2. ...rest ๋งค๊ฐœ๋ณ€์ˆ˜
    3. ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ •
    4. ์˜ค๋ฒ„๋กœ๋“œ
  3. ์ต๋ช… ํ•จ์ˆ˜
    1. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
    2. ํƒ€์ž… ์„ ์–ธ
    3. ์ฝœ๋ฐฑ ํ•จ์ˆ˜

๐Ÿ“p151. ํ•จ์ˆ˜ (Js vs Ts ๋น„๊ต)

js์˜ ๊ฒฝ์šฐ

1
2
3
4
5
6
7
8
function max(x, y) {
return x > y ? x : y;
}

max(1, 10); // 10
max(1, 10, 12); // 10, ์ดํ›„ ์ธ์ž๊ฐ’์€ ๋ฌด์‹œ๋‹นํ•จ
max(`a`, `b`); // `b`
max(`c`, `aaa`); //`c`, ์œผ์Œ... ๋ฌธ์ž์—ด ์ฒซ๋ฒˆ์งธ๊ฐ’์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’์ธ๊ฐ€?

๊ฒฐ๊ณผ

์ด๋ฏธ์ง€

ts์˜ ๊ฒฝ์šฐ

1
2
3
4
5
6
function max(x: number, y: number): number {
return x > y ? x : y;
}
max(1, 10); // 10
max(1, 10, 12); // Error: ์ธ์ž ๊ฐœ์ˆ˜ ์—๋Ÿฌ
max(`a`, `b`); // Error: ์ธ์ž ํƒ€์ž… ์—๋Ÿฌ

๊ฒฐ๊ณผ

์ด๋ฏธ์ง€

๐Ÿ“p156. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ดˆ๊ธฐ๊ฐ’

ES6๋ถ€ํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ • ๋ฐ›์ง€ ์•Š์•„๋„, ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ๋จ

์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  complexity๋„ ๋‚ฎ์•„์ง

ES6 ์ด์ „

1
2
3
4
function test(param) {
param = param || `์ดˆ๊ธฐ๊ฐ’`;
console.log(param);
}

์ด๋ฏธ์ง€

ES6 ์ดํ›„

1
2
3
function test(param = `์ดˆ๊ธฐ๊ฐ’`) {
console.log(param);
}

์ด๋ฏธ์ง€

๐Ÿ“p159. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

ES6๋ถ€ํ„ฐ ์ƒ๊ธด ๊ธฐ๋Šฅ, ์ •์˜๋˜์ง€ ์•Š์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ธฐ ํŽธํ•ด์ง

ES6 ์ด์ „

arguments๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์•Œ๋ ค์ง (๋ณด์•ˆ)

1
2
3
function test() {
console.log(arguments);
}

์ด๋ฏธ์ง€

ES6 ์ดํ›„

1
2
3
function test(...args) {
console.log(args);
}

์ด๋ฏธ์ง€

๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์ง€์ •๋ฒ•

๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํƒ€์ž… ์ง€์ •์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ์•˜๋‹ค

1
2
3
4
// ์ฒ˜์Œ 1๊ฐœ ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด, concat()๊ฐ™์ด ์•„๋ฌด๊ฒƒ๋„ ๋ฐ›์ง€์•Š์•˜์„ ๋•Œ๋Š” ์œ ํšจํ•˜์ง€์•Š์Œ
function concat(a: string, ...restStr: string[]): string {
return `${a} ${restStr.join(` `)}`;
}

๐Ÿ“p162. ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜

js์˜ ๊ฒฝ์šฐ

1
2
3
4
5
6
7
8
function sum(a, b) {
console.log(arguments);
return a + b;
}

sum(1); // NaN
sum(1, 2); // 3
sum(1, 2, 3) // 3, ์ดํ›„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉ๋˜์ง„ ์•Š์ง€๋งŒ, ๋ฐ›์Œ

์ด๋ฏธ์ง€

ts

1
2
3
4
5
6
7
function sum(a: number, b?: number): number {
return a + b;
}

sum(1); // NaN, js์™€ ๊ฒฐ๊ณผ๋Š” ๋™์ผ
sum(1, 2); // 3
sum(1, 2, 3) // Error ์ธ์ž ์ดˆ๊ณผ

๐Ÿ“p164. ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ

์ž˜ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„

ํ•จ์ˆ˜๋ช…์€ ๊ฐ™์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ ๊ฐ€๋Šฅ, ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์ด ๋ณ„๋„ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Œ

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…์„ ๊ฐ€์žฅ ์•„๋ž˜์— ์„ ์–ธ(ex. any๊ฐ€ ๊ฐ€์žฅ ์•„๋ž˜), ์œ„์ผ ์ˆ˜๋ก ๊ตฌ์ฒด์  (์ˆœ์„œ ์ค‘์š”!)

1
2
3
4
5
6
7
8
function add(a: string, b: string);
function add(a: number, b: number);
function add(a: any, b: any): any {
return a + b;
}

console.log(add(1, 2)); // 3
console.log(add(`test1`, `test2`)); // test1test2

๐Ÿ“p170. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์œ ์˜์ 

1
2
3
4
5
// bad case
const test = x => { x; }; // block{}์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ฌด์กฐ๊ฑด return์ด ํ•„์š”ํ•จ!

// good case
const test = x => { return x; };

๐Ÿ“p171. filter, reduce

๐Ÿ“p173. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์„ ์–ธ

๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์งค ๋•Œ ์ข‹์€ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋ฌธ๋ฒ•

1
2
3
4
5
6
7
8
let person = {
name: `Taeuk`,
hello: function (yourName) {
console.log(`Hello ${yourName}, I'm ${this.name}`);
}
}

person.hello(`minsu`);

์ด๋ฏธ์ง€

์ฃผ์˜์‚ฌํ•ญ

function์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— this.name์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„

๋งŒ์•ฝ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๋œฐ ๊ฒƒ ์ด๋‹ค. (ํ˜„์žฌ๋Š” this๊ฐ’์ด window(์ตœ์ƒ์œ„)๋กœ ์žก์€ ์ผ€์ด์Šค)

์ด๋ฏธ์ง€

Typescript์—์„œ this ํƒ€์ž… ์„ ์–ธ

์ž˜ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„

1
2
3
4
interface PersonType {
name: string;
hello(this: PersonType, yourName: string): string;
}

๐Ÿ“p177. type ๋ช…๋ช…๋ฒ•

type๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘, ์ฑ…์€ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘๋˜์„œ ์ด์ƒํ•ด์„œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐพ์•„๋ด„

๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ํ‘œ์ค€ ์ผ€์ด์Šค์ธ ๊ฒƒ ๊ฐ™์Œ

1
type calcType = (a: number, b: number) => number;

๊ณต์‹ ๋ ˆํผ๋Ÿฐ์Šค

๐Ÿ“p179. jquery -> VanillaJS

์Œโ€ฆ ์™œ ๊ตณ์ด ์˜ˆ์‹œ๋ฅผ Jquery๋กœ ๋“ค์—ˆ๋Š”์ง€ ๋ชฐ๋ผ์„œ ์ž‘์„ฑ

Jquery

1
2
3
$(`#myButton`).click(function() {
alert(`๋ฒ„ํŠผ`);
})

js

1
2
3
document.querySelector(`#myButton`).addEventListener(`click`, () => {
window.alert(`๋ฒ„ํŠผ`);
});

๐Ÿ“ 180. ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ(ex. Chrome API)

Promise, async/ await ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ์ถ”์„ธ์ด์ง€๋งŒ, ์•„์ง๋„ ๋งŽ์€ ๋ถ€๋ถ„์— callback ํ•จ์ˆ˜๊ฐ€ ๋‚จ์•„์žˆ๋‹ค.

image-20200323082731982