Skip to content

Commit 44a2a3c

Browse files
committed
til type-compatilibity
1 parent a50d96a commit 44a2a3c

File tree

10 files changed

+220
-17
lines changed

10 files changed

+220
-17
lines changed

class-note/10_type-assertion.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// 타입 단언(type assertion)
2+
var a;
3+
a = 20;
4+
a = 'a'
5+
var b = a as string;
6+
7+
// DOM API 조작
8+
// <div id="app">hi</div>
9+
10+
var div = document.querySelector('div');
11+
if (div) {
12+
div.innerText
13+
}

class-note/11_type-guard.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
interface Developer {
2+
name: string;
3+
skill: string;
4+
}
5+
6+
interface Person {
7+
name: string;
8+
age: number;
9+
}
10+
11+
function introduce(): Developer | Person {
12+
return { name: 'Tony', age: 33, skill: 'Iron Making' }
13+
}
14+
var tony = introduce();
15+
console.log(tony.skill);
16+
17+
if ((tony as Developer).skill) {
18+
var skill = (tony as Developer).skill;
19+
console.log(skill);
20+
} else if ((tony as Person).age) {
21+
var age = (tony as Person).age;
22+
console.log(age);
23+
}
24+
25+
// 타입 가드 정의
26+
function isDeveloper(target: Developer | Person): target is Developer {
27+
return (target as Developer).skill !== undefined;
28+
}
29+
30+
if (isDeveloper(tony)) {
31+
console.log(tony.skill);
32+
} else {
33+
console.log(tony.age);
34+
}

class-note/12_type-compatibility.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// 인터페이스
2+
interface Developer {
3+
name: string;
4+
skill: string;
5+
}
6+
// interface Person {
7+
// name: string;
8+
// // skill: string;
9+
// }
10+
class Person {
11+
name: string;
12+
skill: string;
13+
}
14+
15+
var developer: Developer;
16+
var person: Person;
17+
developer = new Person();
18+
// person = developer;
19+
20+
// 함수
21+
var add = function(a: number) {
22+
// ...
23+
}
24+
var sum = function(a: number, b: number) {
25+
// ...
26+
}
27+
sum = add;
28+
// add = sum;
29+
30+
// 제네릭
31+
interface Empty<T> {
32+
// ..
33+
}
34+
var empty1: Empty<string>;
35+
var empty2: Empty<number>;
36+
empty1 = empty2;
37+
empty2 = empty1;
38+
39+
interface NotEmpty<T> {
40+
data: T;
41+
}
42+
var notempty1: NotEmpty<string>;
43+
var notempty2: NotEmpty<number>;
44+
notempty1 = notempty2;
45+
notempty2 = notempty1;

class-note/9_type-inference.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// 타입 추론 기본 1
2+
var a = 'abc';
3+
4+
function getB(b = 10) {
5+
var c = 'hi';
6+
return b + c;
7+
}
8+
9+
10 + '10'; // 1010
10+
11+
// 타입 추론 기본 2
12+
// interface Dropdown<T> {
13+
// value: T;
14+
// title: string;
15+
// }
16+
// var shoppingItem: Dropdown<string> = {
17+
// value: 'abc',
18+
// title: 'hello'
19+
// }
20+
21+
// 타입 추론 기본 3
22+
interface Dropdown<T> {
23+
value: T;
24+
title: string;
25+
}
26+
interface DetailedDropdown<K> extends Dropdown<K> {
27+
description: string;
28+
tag: K;
29+
}
30+
31+
var detailedItem: DetailedDropdown<number> = {
32+
title: 'abc',
33+
description: 'ab',
34+
value: 'a',
35+
tag: 'a',
36+
};
37+
38+
// Best Common Type
39+
var arr = [1, 2, true, true, 'a'];

class-note/ts-modules/app.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { Todo } from './types'
2+
3+
var item: Todo = {
4+
title: '할 일 1',
5+
checked: false,
6+
}

class-note/ts-modules/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface Todo {
2+
title: string;
3+
checked: boolean;
4+
}

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/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;

quiz/2_address-book/src/index.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,4 @@
1-
interface PhoneNumberDictionary {
2-
[phone: string]: {
3-
num: number;
4-
};
5-
}
6-
7-
interface Contact {
8-
name: string;
9-
address: string;
10-
phones: PhoneNumberDictionary;
11-
}
12-
13-
enum PhoneType {
14-
Home = 'home',
15-
Office = 'office',
16-
Studio = 'studio',
17-
}
1+
import { Contact, PhoneType } from './types';
182

193
// api
204
// TODO: 아래 함수의 반환 타입을 지정해보세요.
@@ -106,6 +90,9 @@ class AddressBook {
10690
/* ------------------------------------------------ */
10791
}
10892

93+
let div = document.querySelector('.container') as HTMLDivElement;
94+
div.innerText;
95+
10996
// let heroes = [
11097
// { name: 'Tony', age: 30 },
11198
// { name: 'Captain', age: 100 },

quiz/2_address-book/src/types.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
interface PhoneNumberDictionary {
2+
[phone: string]: {
3+
num: number;
4+
};
5+
}
6+
7+
interface Contact {
8+
name: string;
9+
address: string;
10+
phones: PhoneNumberDictionary;
11+
}
12+
13+
enum PhoneType {
14+
Home = 'home',
15+
Office = 'office',
16+
Studio = 'studio',
17+
}
18+
19+
export { Contact, PhoneType };

0 commit comments

Comments
 (0)