๐คฝโ๏ธ ์ ๋ค๋ฆญ ํ์ ์ ํ
์ ๋ค๋ฆญ์์ ๋ค์ํ ํ์
์ ํ์ฉํ๊ฒ๋ ํ์ง๋ง ํน์ ํ์
๋ง ๋ฐ์ ์ ์๋๋ก๋ ๊ฐ๋ฅํ๋ค
๐ผ ๊ธฐ๋ณธ์ ์ธ ์ ์ฝ ๊ฑธ๊ธฐ
string๋ง ํ์ฉ ํ ์ ์๋๋ก ์ ์ฝ์ ๊ฑธ์ด๋ณธ๋ค
type C ๊ฐ์ ๊ฒฝ์ฐ number๋ฅผ ๋ฃ์ด์ ์ค์ ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
type A๊ฐ string๋ง ํ์ฉํ๊ฒ๋ ์ค์ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค
// T๊ฐ string์ด์ด์ผ ํ๋ค
type A<T extends string> = {
value: T;
};
// error : number๋ string์ด ๋ ์ ์๋ค
type C = A<number>
// string extends string์ด ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋จ์ง ์๋๋ค
type B = A<string>;
๐ผ ํน์ ํ์ ์ ์ ์ฝ์ ๊ฑธ์ด๋ณด๊ธฐ
์์ ํ์ ์ด์๋ ํน์ ํ์ ์ ๋ํด์๋ ์ ์ฝ์ ๊ฑธ์ด๋ณผ ์ ์๋ค.
Person์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ๊ณ , Person์ด๋ผ๋ ์ธํฐํ์ด์ค๋ง ํ์ฉํ๋ค.
๋ง์ฝ makePerson์ด๋ผ๋ ํจ์์ name์ด๋ผ๋ ์์ฑ๋ง ๋ฃ๋๋ค๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
Person ์ธํฐํ์ด์ค๋ name,age๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค
interface Person {
name: string;
age: number;
}
/* ํน์ ํ์
์ ๊ฐ๋๋ก ์ค์ */
function makePerson<T extends Person>(person: T) {
console.log(person.age, person.name);
}
const person1: Person = {
name: "choi",
age: 32,
};
makePerson(person1);
// error : Person์ ํํ์ ๊ฐ์ง๊ฐ ์๋ค
makePerson({
name:'kim'
})
๐ฑ ์ ๋์จ ํ์ฉ
์ ์ฝ์ ๊ฑธ๋ ์ ๋์จ ๋ํ ๊ฐ๋ฅํ๋ค
string๊ณผ number๋ฅผ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด ์๋์ฒ๋ผ ํํ์ด ๊ฐ๋ฅํ๋ค
function logging<T extends string | number>(log: T) {
console.log(log);
}
logging(1);
logging("1");
//error : boolean์ logging์ ์ ๋์จ ํ์
์ ์กด์ฌํ์ง ์๋๋ค
logging(false);
๐ฅ ๊ฐ์ฒด์ ํค๋ก ์ ์ฝ๊ฑธ๊ธฐ
ํน์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ฐ์ฒด์ ํค๋ง ํ์ฉํ๋๋ก ์ ์ฝ์ ๊ฑธ ์ ์๋ค.
c๋ผ๋ ํค๋ ์กด์ฌํ์ง ์๊ธฐ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
/* ๊ฐ์ฒด์ ํค๋ก ์ ์ฝ๊ฑธ๊ธฐ */
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
getProperty({ a: 1, b: 2 }, "a");
// c๋ผ๋ key๋ ์กด์ฌํ์ง ์๋๋ค
getProperty({ a: 1, b: 2 }, "c");
'typescript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ (0) | 2025.02.07 |
---|---|
๐ ํ์ ์คํฌ๋ฆฝํธ ํจ์ (0) | 2025.01.18 |
๐ฆถ ํ์ ์คํฌ๋ฆฝํธ ์ธํฐํ์ด์ค (0) | 2025.01.12 |
๐ง ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ํ์ (0) | 2025.01.03 |
๐ง ์ธํฐํ์ด์ค (1) | 2024.11.17 |
๋๊ธ