Skip to content

Commit d6072b6

Browse files
committed
before generics
1 parent 18e38bd commit d6072b6

22 files changed

+458
-34
lines changed

class-note/1_type-basic.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// JS 문자열 선언
2+
// var str = 'hello';
3+
4+
// TS 문자열 선언
5+
let str: string = 'hello';
6+
7+
// TS 숫자
8+
let num: number = 10;
9+
10+
// TS 배열
11+
let arr: Array<number> = [1,2,3];
12+
let heroes: Array<string> = ['Capt', 'Thor', 'Hulk', 10]
13+
let items: number[] = [1,2,3];
14+
15+
// TS 튜플
16+
let address: [string, number] = ['gangnam', 100];
17+
18+
// TS 객체
19+
let obj: object = {};
20+
// let person: object = {
21+
// name: 'capt',
22+
// age: 100
23+
// };
24+
let person: { name: string, age: number } = {
25+
name: 'thor',
26+
age: 1000
27+
}
28+
29+
// TS 진위값
30+
let show: boolean = true;

class-note/2_functions.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// 함수의 파라미터에 타입을 정의하는 방식
2+
// function sum(a: number, b: number) {
3+
// return a + b;
4+
// }
5+
// sum(10, 20);
6+
7+
// 함수의 반환 값에 타입을 정의하는 방식
8+
function add(): number {
9+
return 10;
10+
}
11+
12+
// 함수에 타입을 정의하는 방식
13+
function sum(a: number, b: number): number {
14+
return a + b;
15+
}
16+
sum(10);
17+
18+
// 함수의 옵셔널 파라미터(?)
19+
function log(a: string, b?: string) {
20+
21+
}
22+
log('hello world');
23+
log('hello ts', 'abc');

class-note/3_interface.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
interface User {
2+
age: number;
3+
name: string;
4+
}
5+
6+
// 변수에 인터페이스 활용
7+
var seho: User = {
8+
age: 33,
9+
name: '세호'
10+
}
11+
12+
// 함수에 인터페이스 활용
13+
function getUser(user: User) {
14+
console.log(user);
15+
}
16+
const capt = {
17+
name: '캡틴',
18+
age: 100
19+
}
20+
getUser(capt);
21+
22+
// 함수의 스펙(구조)에 인터페이스를 활용
23+
interface SumFunction {
24+
(a: number, b: number): number;
25+
}
26+
27+
var sum: SumFunction;
28+
sum = function(a: number, b: number): number {
29+
return a + b;
30+
}
31+
32+
// 인덱싱
33+
interface StringArray {
34+
[index: number]: string;
35+
}
36+
37+
var arr: StringArray = ['a','b','c'];
38+
// arr[0] = 10;
39+
40+
// 딕셔너리 패턴
41+
interface StringRegexDictionary {
42+
[key: string]: RegExp;
43+
}
44+
45+
var obj: StringRegexDictionary = {
46+
// sth: /abc/,
47+
cssFile: /\.css$/,
48+
jsFile: /\.js$/,
49+
}
50+
// obj['cssFile'] = 'a'
51+
52+
Object.keys(obj).forEach(function(value) {});
53+
54+
// 인터페이스 확장
55+
interface Person {
56+
name: string;
57+
age: number;
58+
}
59+
60+
interface Developer extends Person {
61+
language: string;
62+
}
63+
64+
var captain: Developer = {
65+
language: 'ts',
66+
age: 100,
67+
name: '캡틴'
68+
}

class-note/4_type-aliases.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// interface Person {
2+
// name: string;
3+
// age: number;
4+
// }
5+
6+
type Person = {
7+
name: string;
8+
age: number;
9+
}
10+
11+
var seho: Person = {
12+
name: '세호',
13+
age: 30
14+
}
15+
16+
type MyString = string;
17+
var str: MyString = 'hello';
18+
19+
type Todo = { id: string; title: string; done: boolean };
20+
function getTodo(todo: Todo) {
21+
22+
}

class-note/5_operator.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// function logMessage(value: any) {
2+
// console.log(value);
3+
// }
4+
// logMessage('hello');
5+
// logMessage(100);
6+
7+
var seho: string | number | boolean;
8+
function logMessage(value: string | number) {
9+
if (typeof value === 'number') {
10+
value.toLocaleString();
11+
}
12+
if (typeof value === 'string') {
13+
value.toString();
14+
}
15+
throw new TypeError('value must be string or number');
16+
}
17+
logMessage('hello');
18+
logMessage(100);
19+
20+
// 인터섹션(교차) 타입
21+
interface Developer {
22+
name: string;
23+
skill: string;
24+
}
25+
26+
interface Person {
27+
name: string;
28+
age: number;
29+
}
30+
31+
function askSomeone(someone: Developer & Person) {
32+
someone.name;
33+
someone.age;
34+
someone.skill;
35+
}

class-note/6_enum.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
enum Shoes {
2+
Nike = '나이키',
3+
Adidas = '아디다스'
4+
}
5+
6+
var myShoes = Shoes.Nike;
7+
console.log(myShoes); // '나이키'
8+
9+
// 예제
10+
enum Answer {
11+
Yes = 'Y',
12+
No = 'N',
13+
}
14+
15+
function askQuestion(answer: Answer) {
16+
if (answer === Answer.Yes) {
17+
console.log('정답입니다');
18+
}
19+
if (answer === Answer.No) {
20+
console.log('오답입니다');
21+
}
22+
}
23+
askQuestion(Answer.Yes);
24+
askQuestion('Yes');
25+
// askQuestion('예스');
26+
// askQuestion('y');
27+
// askQuestion('Yes');

class-note/7_class.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Person {
2+
private name: string;
3+
public age: number;
4+
readonly log: string;
5+
6+
constructor(name: string, age: number) {
7+
this.name = name;
8+
this.age = age;
9+
}
10+
}
11+
12+
// 리액트 예전 문법 - 클래스 기반 코드
13+
class App extends React.Component {
14+
15+
}
16+
17+
// 리액트 최신 문법 - 훅 기반의 함수형 코드
18+
function App() {
19+
return <div>Hello World</div>
20+
}
21+
22+
//
23+
new Vue({
24+
el: '',
25+
setup() {
26+
27+
}
28+
})

class-note/class.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function Person(name, age) {
2+
this.name = name;
3+
this.age = age;
4+
}
5+
var capt = new Person('캡틴', 100);
6+
7+
class Person {
8+
// 클래스 로직
9+
constructor(name, age) {
10+
console.log('생성 되었습니다');
11+
this.name = name;
12+
this.age = age;
13+
}
14+
}
15+
16+
var seho = new Person('세호', 30); // 생성 되었습니다.
17+
console.log(seho);

class-note/function.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function sum(a, b) {
2+
return a + b;
3+
}
4+
5+
sum(10, 20, 30, 40, 50);

example/4_interfaces.ts

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ interface User {
55
}
66

77
// 변수에 사용하는 경우
8-
const seho: User = { name: 'hi', age: 100 };
8+
const seho: User = { name: '세호', age: 100 };
99

1010
// 함수의 매개변수에 사용하는 경우
1111
function getUser(user: User) {
@@ -14,21 +14,34 @@ function getUser(user: User) {
1414
getUser(seho);
1515

1616
// 함수의 전체 타입에 사용하는 경우
17-
// interface SumFunction {
18-
// (a: number, b: number): number;
19-
// }
20-
// let sum: SumFunction;
21-
// sum = function (num1: number, num2: string): number {
22-
// return num1 + num2;
23-
// };
17+
interface SumFunction {
18+
(a: number, b: number): number;
19+
}
20+
let sum: SumFunction;
21+
sum = function (num1: number, num2: string): number {
22+
return num1 + num2;
23+
};
2424

2525
// 배열의 인덱싱에 사용하는 경우
26-
// interface StringArray {
27-
// [index: number]: string;
28-
// }
29-
// let arr: StringArray;
30-
// arr[0] = 'hi';
31-
// arr[1] = 10;
26+
interface StringArray {
27+
[index: number]: string;
28+
}
29+
let arr: StringArray;
30+
arr[0] = 'hi';
31+
arr[1] = 10;
32+
33+
// 딕셔너리 패턴
34+
interface StringRegexDictionary {
35+
[key: string]: RegExp;
36+
}
37+
38+
const regexMap: StringRegexDictionary = {
39+
cssFile: /\.css$/,
40+
jsFile: /\.js$/,
41+
};
42+
43+
Object.keys(regexMap).forEach(function(value) {
44+
})
3245

3346
// 인터페이스 확장
3447
interface Person {

example/7_union-intersection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ interface Person {
3737
function askSomeone(someone: Developer | Person) {
3838
someone.name; // O
3939
someone.age; // X
40-
}
40+
}

example/8_generics.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ interface ShoppingItems {
3939
stock: number;
4040
}
4141
function getAllowedOptions<T extends keyof ShoppingItems>(option: T): T {
42-
if (option === 'name' || option === 'address') {
43-
console.log('option type is string');
44-
return option;
45-
}
46-
if (option === 'price' || option === 'stock') {
47-
console.log('option type is number');
48-
return option;
49-
}
42+
return option;
43+
// if (option === 'name' || option === 'address') {
44+
// console.log('option type is string');
45+
// return option;
46+
// }
47+
// if (option === 'price' || option === 'stock') {
48+
// console.log('option type is number');
49+
// return option;
50+
// }
5051
}
5152
getAllowedOptions('nothing');
5253
// const a = getAllowedOptions('name');

getting-started/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function sum(a, b) {
2+
return a + b;
3+
}
4+
sum(10, 20);

getting-started/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function sum(a: number, b: number): number {
2+
return a + b;
3+
}
4+
5+
sum(10, 20);

getting-started/tsconfig.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"compilerOptions": {
3+
"allowJs": true,
4+
"checkJs": true,
5+
"noImplicitAny": true
6+
}
7+
}

quiz/1_todo/src/a.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
let arr = [
2+
{ gender: 'male', name: 'john' },
3+
{ gender: 'female', name: 'sarah' },
4+
{ gender: 'male', name: 'bone' },
5+
];
6+
7+
let filtered = arr.filter(function (item) {
8+
if (item.gender === 'female') {
9+
return item;
10+
}
11+
});
12+
console.log(filtered);

0 commit comments

Comments
 (0)