Skip to content

Commit 93b5dd1

Browse files
committed
🚩: generic과 interface를 유연하게 사용할 수 있는 방법을 찾아본다.
1 parent 6dba5b0 commit 93b5dd1

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
// Generic : 클래스나 타입을 재사용하기 위한 문법
22
// interface와 Generic을 사용해서 활용할 수도 있다.
33

4-
import { myUser, myCar, myBook } from "./utils/data.interface";
4+
import { myUser, myCar, myBook, objectType } from "./utils/data.interface";
55

66
const user: myUser = { name: "a", age: 10 };
77
const car: myCar = { name: "bmw", color: "red" };
88
const book: myBook = { price: 3000 };
99

1010
// 제네릭 T를 사용해보면 T가 name 속성을 가지고 있다는 보장이 없기 때문에 error가 뜬다. 따라서 name의 타입을 extends를 사용해서 확장 시키면 error가 사라진다.
11-
function showName<T extends { name: string }>(data: T): string {
12-
return data.name;
11+
function showName<T extends objectType>(data: T): string {
12+
return data.name ? data.name : "Undefined";
1313
}
1414

1515
showName(user);
1616
showName(car);
17-
//showName(book); //error -> book은 name 객체가 없기 때문에 error가 발생한다. 이를 해결하기 위해서는 조건을 통해서 유연하게 대체를 할수 있다.
17+
showName(book); //error -> book은 name 객체가 없기 때문에 error가 발생한다. 이를 해결하기 위해서는 조건을 통해서 유연하게 대체를 할수 있다.
18+
// book에 name객체를 삽입하는 방법 외의 선택적 방식으로 동작하게 하려고 했으나 book을 해결하면 나머지가 error가 발생 한다.
19+
// **방법을 한번 찾아보면 좋을 듯 하다.**
20+
//useState같아 보이지 않는가?

src/utils/data.interface.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,8 @@ export interface myCar {
9494

9595
export interface myBook {
9696
price: number;
97+
}
98+
99+
export interface objectType extends myBook {
100+
name?: string;
97101
}

0 commit comments

Comments
 (0)