## ์ด๋ ฅ์, ํฌํด ์ฒจ์ญ ๋ฑ ๊ฐ์ ์ธ ๋ฌธ์์ฌํญ์ด ์์ผ์๋ฉด ์ด๊ณณ์ผ๋ก ๋ฌธ์ ์ฃผ์ธ์
๐ morishjs@gmail.com
๊ฐ์ฌ ๊นํ: https://github.com/morishjs
์ง์์ ์ฅ์: https://wiki.after-camp.com/Home
๐จ ํฌํธํด๋ฆฌ์ค: https://morish.dev
๐ ์ด๋ ฅ: https://shorturl.at/gKU68
๋ถํธ์บ ํ ์๋ฃํ๋๋ฐ ์์ผ๋ก ๋ญ ๊ณต๋ถํด์ผ ํ ์ง ๋ง๋งํ์์ฃ ?
๐ ๋ถํธ์บ ํ์์๋ ์ทจ์ ๋ฅ 90%๋ผ๊ณ ํ๋๋ฐ... ์ ์ทจ์ ์ด ์ ์๋ผ์! ๐ข
๐ ์ทจ์ ์ ํ๋๋ฐ ์ฌ์๊ฐ ์์ด์ ๋๋ฌด ๋ถ์ํด์! ๐ค
๐ ์์ฑํ ์ฝ๋๊ฐ ๋์์ ํ๋๋ฐ ์ด๋ ๊ฒ ์์ฑํ๋์ง ๋ชจ๋ฅด๊ฒ ์ด์! ๐คฏ
์ ํํฐ์บ ํ์์๋ ๋ค์์ด ๊ฐ๋ฅํฉ๋๋ค!
๐ CTO 2๋ฒ ๊ฒฝํ, ๋ค์์ ํ๋ก์ ํธ๋ฅผ ๊ฒฝํํ ํ์คํ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ์นญํฉ๋๋ค.
๐ ์ฝ๋ ๋ฆฌ๋ทฐ, ์ปค๋ฆฌ์ด ๋ฐฉํฅ์ฑ ๊ณ ๋ฏผ์ ๊ฐ์ด ํด๋๋ฆฝ๋๋ค.
๐ ์ ํํฐ์บ ํ์๋ ํ๊ตญ, ๋ฏธ๊ตญ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ ์๋น ๊ฐ๋ฐ์, ํ์ง์๊ฐ ๋ชจ์ธ ๊ณณ์ ๋๋ค.
Courses
Reviews
- Advanced TypeScript skills learned through hands-on practice
- Things They Don't Teach You in Bootcamps (React Rendering Optimization) Part 2
- Advanced TypeScript skills learned through hands-on practice
- Things They Don't Teach You in Bootcamps (React Rendering Optimization) Part 2
- Things They Don't Teach You in Bootcamps (React Rendering Optimization) Part 2
Posts
Q&A
๊ฐ ๊ฐ์์ ๋ํ ์ค๋ช ๋งํฌ 404์๋ฌ
์๋ ํ์ธ์ ๋ถํธ์ ๋๋ ค์ ์ฃ์กํฉ๋๋ค. ๋ณต๊ตฌํ์ผ๋ ์ง๊ธ์ ์ ๋ณด์ผ ๊ฒ๋๋ค.
- 0
- 2
- 24
Q&A
ํ์ด๋ฌธ์ ๋๋ค์ ๋ฑ๋ก ์์ฒญ๋๋ฆฝ๋๋ค
์๋ ํ์ธ์ ๋ฑ๋ก ์๋ฃํ์ต๋๋ค.
- 0
- 2
- 19
Q&A
Automatic batching์ ๊ดํด ๊ถ๊ธํ ์ ์ด ์์ต๋๋ค.
๋ค ๋ง์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฆฌ์กํธ ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ๊ฐ ๋์ด์์ต๋๋ค.
- 0
- 1
- 70
Q&A
๋ธ๋ก๊ทธ ๋งํฌ ๋ฌธ์
๋ณต๊ตฌํ์ต๋๋ค!
- 1
- 1
- 86
Q&A
์ ๋ค๋ฆญ๊ณผ ์ฌ์ฉ์ ์ ์ ํ์ ๊ฐ๋์ ๊ดํ ์ง๋ฌธ
์๋ ํ์ธ์.์ฐ์ ์ ๊ฐ ์๊ฐํ ๋ต์์ ๋ณด์ฌ๋๋ฆฌ๋ฉดtype SingleValue = Date | null type RangeValue = [SingleValue, SingleValue] type DatePicker = | { type: 'single'; value: SingleValue } | { type: 'range'; value: RangeValue }; class DatePickerKlass { picker: DatePicker; constructor(picker: DatePicker) { this.picker = picker; } updateValue(date: Date) { if (this.picker.type === 'single') { this.picker.value = date; } else if (this.picker.type === 'range') { this.picker.value = [date, null]; } } }์์ฑํด์ฃผ์ ๋ต์ ๋ณด๋ค ์ข ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์ง ์์๊น ํด์ ์ ๊ฐ์ ๊ฒฝ์ฐ์ discriminated union ์ผ๋ก ๋ฌธ์ ํ์ด๋ดค์ต๋๋ค. updateValue(date:Date) { const isSingle = ():this is DatePicker => this.type === 'single' if(isSingle()) { this.value = date return; } }์ฌ๊ธฐ์ ํ์ ์ด ์ขํ์ง์ง ์๋ ์ด์ ๋ ํ์ ์คํฌ๋ฆฝํธ์ ํน์ฑ์ธ๋ฐ์. T์ ํ์ ์ ์ ํํด๋ ๊ฒฐ๊ตญ T๋ 'placeholder'์ด๊ธฐ ๋๋ฌธ์ ํน์ ํ์ ์ผ๋ก ์ขํ์ง์ง ์์ต๋๋ค. ์ ๋ ์ค๋ฌด์์ ์ฌ์ฉํ๋ค๋ณด๋ฉด, ์๊ฐ๋๋ก ์๋๋ ๊ฒ ์ฐธ ๋ง์๋ฐ ์ด๋ด ๋ "์! ์ด๊ฑด ์์ง ํ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐํ์๋ ๋ถ์ด ๊ตฌํ์ ์ํด๋จ๊ตฌ๋..." ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์ ์ด ๋์์ง๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ ํด๊ฒฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ฑฐ๋ ์.ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ statically-typed ์ธ์ด์ ๋นํด ๊ต์ฅํ ์์ ๋๊ฐ ๋์๋ฐ, ๊ทธ๋งํผ ์์ง ๊ตฌํ์ด ์๋ ๊ฒ์ด ์ข ์ข ์์ต๋๋ค.
- 1
- 1
- 126
Q&A
์ ๋ค๋ฆญ ํ์ ์ ํ์ ํ๋๊ฒ์ด ์ด๋ค ์ฅ์ ์ด ์์๊น์ ?
์๋ ํ์ธ์ ์์๋ ๐ ์ฌ๋ ค์ฃผ์ ์์์์ ์ฌ์ค ์ ํํ๋ ์ด์ ๋ฅผ ์ฐพ๊ธฐ๋ ์ฝ์ง ์์ต๋๋ค. ์๋์ ์์ ๋ฅผ ๋ณด์๋ฉด ์กฐ๊ธ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ์ฐพ์ ์ ์์ง ์์๊น ์๊ฐํ๋๋ฐ, obj์์ object์ key๋ค๋ง ์ ๊ทผํ๊ณ ์ถ์ ๋ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. function getValue(key: T, obj: Record) { return obj[key]; } const obj = { key1: 1, key2: 2 }; getValue('key1', obj); // 'key1' ํ์ ์ผ๋ก ์์ ํ๊ฒ ํธ์ถ ๊ฐ๋ฅ getValue('key3', obj); // ์ปดํ์ผ ์๋ฌ (key3๋ obj์ ํค๊ฐ ์๋)Record์ ํ์ ์ฒซ๋ฒ์งธ ์ธ์๋ ํญ์ string | symbol | number ๊ฐ ์์ผ ํ๋๋ฐ์. ์ด ๊ฒฝ์ฐ์๋ string์ผ๋ก ๊ฐ์ ํ๊ธฐ ์ํด T extends string string ํ์ ์ผ๋ก ์ ํํ์ต๋๋ค. ๊ฐ์๋ฅผ ์กฐ๊ธ๋ง ๋ ๋ค์ด๋ณด์๋ฉด ์ ๋ค๋ฆญ ํ์ ์ ํํ๋ ๋ฌธ์ ๋ค์ด ์์ผ๋ ํ๋ฒ ํ์ด๋ณด์๋ฉด ์ด๋ ์ํฉ์์ ์ฌ์ฉํ ์ ์์ผ์ ์ง ๊นจ๋ซ๊ฒ ๋์ค๊ฑฐ์์.๊ทธ๋๋ ๋ง์ฝ ์ดํด๊ฐ ๋์ง ์์ผ์ ๋ค๋ฉด ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์!
- 1
- 1
- 105
Q&A
ํ์ด๋ฌธ์ ๋๋ค์ ๋ฑ๋ก ์ ์ฒญํฉ๋๋ค!
๋ฑ๋กํด๋๋ ธ์ต๋๋ค :)
- 0
- 2
- 83
Q&A
ํ์ด๋ฌธ์ ํ ์คํธ ์ ์ ์ด๋ฆ ์ ๋ ฅ ์์ฒญ
๋ฑ๋กํ์ต๋๋ค!
- 0
- 2
- 94
Q&A
ํ์ด๋ฌธ์ ๋๋ค์ ์ ๋ ฅ ์์ฒญ
์ถ๊ฐํด๋๋ ธ์ต๋๋ค :)
- 1
- 2
- 114
Q&A
ํ์ด๋ฌธ์ ํ ์คํธ ์ ์ ์ด๋ฆ ์ ๋ ฅ ์์ฒญ
์ถ๊ฐํ์ต๋๋ค!
- 1
- 2
- 98