제네릭 인터페이스
interface KeyPair<K, V>{
key : K;
value : V;
}
let Keypair : KeyPair<string, number> = {
key : "key",
value :0
}
let KeyPair2 : KeyPair<boolean, string[]>={
key : true,
value : ["1"]
}
➡️ 인덱스 시그니쳐와 함께 사용하기
interface Map<V> {
[key : string] : V;
}
let stringMap :Map<string> = {
key : "value"
}
let booleanMap : Map<boolean> = {
key : true
}
➡️ 제네릭 타입 별칭
type Map2<V> = {
key : V
}
let stringMap2 : Map2<string> = {
key : "hello"
}
➡️ 제네릭 인터페이스의 활용 예시
interface Student {
type: "student";
school: string;
}
interface Developer {
type: "developer";
skill: string;
}
interface User {
name: string;
profile: Student | Developer;
}
function goToSchool(user: User) {
if (user.profile.type !== "student") {
console.log("잘 못 오셨습니다");
return;
}
const school = user.profile.school;
console.log(`${school}로 등교 완료`);
}
const developerUser: User = {
name: "이정환",
profile: {
type: "developer",
skill: "typescript",
},
};
const studentUser: User = {
name: "홍길동",
profile: {
type: "student",
school: "가톨릭대학교",
},
};
👍 제네릭 인터페이스로 바꾸기
interface Student1 {
type: "student";
school: string;
}
interface Developer1 {
type: "developer";
skill: string;
}
interface User1<T> {
name: string;
profile: T;
}
function goToSchool1(user: User1<Student1>) {
const school = user.profile.school;
console.log(`${school}로 등교 완료`);
}
const developerUser1: User1<Developer1> = {
name: "이정환",
profile: {
type: "developer",
skill: "typescript",
},
};
const studentUser1: User1<Student1> = {
name: "홍길동",
profile: {
type: "student",
school: "가톨릭대학교",
},
};