ํ์ ์คํฌ๋ฆฝํธ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๋ณ์ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ ์ง์ ํ์ฌ ์์ธก ๊ฐ๋ฅํ ์ฝ๋ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
JavaScript : dynamic typing ๋์ ํ์ดํ ์ธ์ด
TypeScript : ์ ์ ํ์ดํ์ด ๋ชฉ์ => ์ฝ๋์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ์ฌ ์ปดํ์ผ ์ค ์๋ฌ๊ฐ ๋์ง ์๊ณ ๊ฐ๋ฐ ์ค์ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ์ฅ์ ์ด ์๋ค.
- ๊ฐ์ฒด ์งํฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ
- ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ์ก์ ์ ์์
- ์ปดํ์ผ ๋์ด์ผ ํจ
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ์คํ๋ ์ ์์
๋ธ๋ผ์ฐ์ ๊ฐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ ๋์ด์ผ ํ๋ค.
ํ์ ์ถ๋ก
ํ์ ์คํฌ๋ฆฝํธ์์๋ ํ์ ํ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ ์ ์ถ๋ก ํ์ฌ a๊ฐ ์๋์ผ๋ก ์ซ์๊ฐ ๋๋ค
๋ฐ์์ ์ซ์์ธ a์ ๋ฌธ์๋ฅผ ํ ๋นํ๋ คํ๋ ์ค๋ฅ๋ฉ์ธ์ง๊ฐ ๋ฌ๋ค.
ํ์ ํ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ฝ์ด ํ์ ์ ์ถ๋ก ํ๋ค.
ํ์ ๋ช ์
๋ณ์๊ฐ์ ํ์ ์ ๋ช ์ํ์ฌ ๋ฐ์ดํฐ ํ์ ์ ์ง์
const x: number
x๋ณ์ : ์ซ์
let studentId: number = 1234;
let studentName:string= 'hi';
function str2num(a: number): object{
return {a:'hi'}
}
type ๊ณผ interface ?
์ธํฐํ์ด์ค or type ์ด๋ฆ์ ๋๋ฌธ์
interface Point {
x: number;
y: number;
}
type Point = {
x: number;
y: number;
};
interface IFn {
(name:string) : string
}
type IFn = (name:string) => string;
interface
๊ฐ์ฒดํ์ ์ ๋ง๋ค๊ธฐ ์ํจ -> ๊ฐ์ฒด๋ง ๊ฐ๋ฅ
type
function ํ์์ interface๋ณด๋ค ๊ฐ๋จํ ์ ์ธ ๊ฐ๋ฅ
๐ฎ ์ด๋ค ๊ฒ์ด ๋ ์ข์์ง?
์ฌ๊ท์ ์ผ๋ก ์ํํ๋ฉฐ ์์ฑ์ ๋จธ์งํ๊ธฐ ๋๋ฌธ์ type์ merge ์ ์ฃผ์ํด์ผ ํ๋ค.
ํฉ์ฑ์์ฒด์ ๋ํ ์ ํจ์ฑ์ ํ๋จํ๊ธฐ ์ ์ ๋ชจ๋ ๊ตฌ์ฑ์์์ ๋ํ ํ์ ์ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ ์๋์ ์ผ๋ก ์ฑ๋ฅ์ด ์ข์ง ์๋ค.
์ฑ๋ฅ์ ์ํด์๋ interface๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค ( ๊ฐ์ฒด์์๋ง ์ฐ์ด๋ ์ฉ๋๋ผ๋ฉด..)
ํ๋ก์ ํธ ์ ๋ฐ์ type๊ณผ interface์ค ํ๋๋ฅผ ํต์ผํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ถ์ฒ : https://yceffort.kr/2021/03/typescript-interface-vs-type
interface์ ์ ์ํ๊ธฐ
* ์ ํ์ property
๋ฌผ์ํ๋ก ํ์ํ๋ฉด ์์ด๋ ์์ด๋ ๋๋ property์ง์ ๊ฐ๋ฅ
interface Student {
id: number;
name: string;
age?: number;
}
* ๋ฉ์๋ property์ ์ ๊ฐ๋ฅ
interface Student {
id: number;
name: string;
age?: number;
addComment: (comment: string) => string;
}
* readonly
์ฝ๊ธฐ์ ์ฉ์ผ๋ก ์ง์ ๋ ์์ฑ์ ์์ ๋ ์ ์์
์ค์ interface๋ ์ปดํ์ผ๋ javascript ํ์ผ์ ์์
์ฝ๋๊ฐ ๋ ๋๋ง ๋ ๋ ์ํฅ๋ ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณํ๋์ง๋ ์์
Enum
enum GenderType {
Male,
Female,
}
function getStudentDetails(id: number): Student {
return {
id: 1,
name: 'tami',
gender: GenderType.Male,
};
}
var GenderType;
(function (GenderType) {
GenderType[GenderType["Male"] = 0] = "Male";
GenderType[GenderType["Female"] = 1] = "Female";
})(GenderType || (GenderType = {}));
enum์ ์๋ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋๋ฉฐ ํ ๋นํ๋ ๋ฐฉ์
์ฆ GenderType์ enum์ ์ซ์ ์์ฑ์ ๊ฐ์ง๊ณ ์์
String enum
interface Student {
readonly id: number;
name: string;
age?: number;
gender: GenderType;
addComment?: (comment: string) => string;
}
์ด๋ ๊ฒ ๊ฐ๋จํ ๋ฌธ์ํ enum๋ ๊ฐ๋ฅ
๋ฆฌํฐ๋ด ํ์
interface Student {
readonly id: number;
name: string;
age?: number;
gender: 'male' | 'female';
addComment?: (comment: string) => string;
}
๋ ๊ฐํธํ๊ฒ | ๋ก ํด๋น ์์ฑ์ด ๊ฐ์ง ์ ์๋ ๊ฐ ์ง์ ๊ฐ๋ฅ
ํ์ ์ ๊ดํ ๋ ๋ง์ ์ ๋ณด๊ฐ ์ ๊ณต๋ ์๋ก ๊ฐ๋ฐ์์ ์๋๊ฐ ๋ช ํํ๊ฒ ์ ๋ฌ๋จ
์ฝ๋๊ฐ ํจ๊ณผ์ ์ผ๋ก ์ ์ง ๋ณด์๊ฐ ๋จ
---> any ํ์ ์ ์ฌ์ฉ์ ์ต์ํ ํ๋๊ฒ ์ข์
์ ๋์ธ ํ์
const someValue : string | number
type Gurad
์ ๋์ธ ํ์ ์ ์ฌ์ฉํ ๋, typeof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ๊ฒ์ฆ์ ์ํํ๋ ๊ฒ
type Alises
๋ช๊ฐ์ง type์ ๊ฐ์ง props ์ง์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
type strOrNum = number | string;
const setValue = (value : strOrNum):strOrNum =>{
return value;
}
ํจ์ํ ํ์
ํจ์์ ์ ์๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์๊ฐ ํจ์๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์
์ ํ์ ๋งค๊ฐ๋ณ์
๋ช๊ฐ์ง๋ง ์ ํ์ ๋งค๊ฐ๋ณ์์ผ๋ ? ๋ถ์ฌ์ ํ์ ๊ฐ๋ฅ
function sendGreeting(a: string, b?: string): void {
console.log(`${a} ${b}`);
}
sendGreeting('h', 'h');
sendGreeting('h');
์ ํ์ ๋งค๊ฐ๋ณ์๋ ํ์ ๋งค๊ฐ๋ณ์ ๋ค์ ์ ์ธ๋์ผํจ
๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์
๋งค๊ฐ๋ณ์์ default๊ฐ ์ง์
function sendGreeting(a: string, b = 'there'): void {
console.log(`hi ${a}, ${b}`);
}
์ ๊ทผ์ ํ์ Acess Modifier
ํด๋์ค์ ๋ฉค๋ฒ๋ณ์์ ๋ฉ์๋์ ์ ๊ทผํ ์ ์๋
์ฐธ๊ณ (https://www.youtube.com/watch?v=VJ8rvsw2j5w)
'๐TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js] #1 TypeScript๋ก ์์ํ๊ธฐ (0) | 2021.07.22 |
---|
๋๊ธ