Skip to content

Commit 7d559da

Browse files
committed
add generic dropdown example with infer, comp
1 parent 6d3e23c commit 7d559da

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

example/9_type-inference.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var a = 'a';
2+
3+
function logA(a = 'a') {
4+
var b = 10;
5+
return b;
6+
}
7+
8+
interface Dropdown<T> {
9+
value: T
10+
title: string;
11+
}
12+
var items: Dropdown<number> = {
13+
value: 10,
14+
title: 'a'
15+
}
16+
17+
interface DetailedDropdown<T> extends Dropdown<T> {
18+
description: string;
19+
tag: T;
20+
}
21+
var detailItems: DetailedDropdown<number> = {
22+
value: 'hi',
23+
title: 'a',
24+
description: 'b',
25+
tag: 'c'
26+
}

example/dropdown-generic.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<title>Document</title>
7+
</head>
8+
<body>
9+
<div>
10+
<h1>이메일 선택 드롭다운</h1>
11+
<select id="email-dropdown">
12+
<option value="naver.com" selected>naver.com</option>
13+
<option value="google.com">google.com</option>
14+
<option value="hanmail.net">hanmail.net</option>
15+
</select>
16+
</div>
17+
<div>
18+
<h1>상품 수량 선택 드롭다운</h1>
19+
<select id="product-dropdown">
20+
<option value="1" selected>1</option>
21+
<option value="2">2</option>
22+
<option value="3">3</option>
23+
</select>
24+
</div>
25+
</body>
26+
</html>

example/dropdown-generic.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const emails = [
2+
{ value: 'naver.com', selected: true },
3+
{ value: 'gmail.com', selected: false },
4+
{ value: 'hanmail.net', selected: false },
5+
];
6+
7+
const numberOfProducts = [
8+
{ value: 1, selected: true },
9+
{ value: 2, selected: false },
10+
{ value: 3, selected: false },
11+
];
12+
13+
function createDropdownItem(item) {
14+
const option = document.createElement('option');
15+
option.value = item.value.toString();
16+
option.innerText = item.value.toString();
17+
option.selected = item.selected;
18+
return option;
19+
}
20+
21+
// NOTE: 이메일 드롭 다운 아이템 추가
22+
emails.forEach(function (email) {
23+
const item = createDropdownItem(email);
24+
const selectTag = document.querySelector('#email-dropdown');
25+
selectTag.appendChild(item);
26+
});

example/type-comp.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// 인터페이스
2+
interface Developer {
3+
name: string;
4+
skill: string;
5+
}
6+
7+
interface Person {
8+
name: string;
9+
}
10+
11+
var a: Developer;
12+
var b: Person;
13+
// a = b; // X
14+
b = a; // O
15+
16+
// 함수
17+
var add = function(a: number) {
18+
// ...
19+
}
20+
var sum = function(a: number, b: number) {
21+
// ...
22+
}
23+
// sum = add; // X
24+
// add = sum; // O
25+
26+
// // 유니온 타입
27+
// var c: Developer | Person;
28+
// var d: Person | string;
29+
// c = d;
30+
// d = c;

0 commit comments

Comments
 (0)