< 1차 프로젝트 코드 리뷰 >
팀원들간 1차 프로젝트 코드 리뷰를 진행했다.
전체 코드를 다시 한 번 읽어보며 아쉬운 점을 찾아보고,
어떤 로직으로 작성하게 됐는지도 돌아볼 수 있었다.
코드 리뷰를 해도 어려웠던 점은
1. api 요청 관련 코드를 작성하는 법
2. placeholder를 활용하는 법
3. 주소 값을 불러오는 법
몇 번을 보면서 이해를 했음에도 다시 보면 어렵고,
새로 작성을 하려고 하면 전혀 손도 대지 못한다.
아직 공부해야 할 것들이 정말 많은 것 같다..
[Section 02] Typescript 기본
< 03. 함수 타입 >
function greet(name: string): string {
return `Hello, ${name}`;
}
const expr = function greet(name: string): string {
return `Hello, ${name}`;
};
const expr2: (name: string) => string = function greet(name) {
return `Hello, ${name}`;
};
greet("john");
- 예시
function sum(n1: number, n2: number): number {
return n1 + n2;
}
sum(10, 20);
const expr = (n1: number, n2: number): number => n1 + n2;
const expr2: (n1: number, n2: number) => number = (n1, n2) => n1 + n2;
1. void
타입
2. 옵셔널 파라미터 (?)
- 옵셔널 파라미터는
?
기호로 표시
?
기호로 표시하면 타입으로 지정한 매개 변수를 생략할 수 있음
function sum(n1: number, n2?: number) {
return n1 + (n2 || 0);
}
sum(10);
const expr = function sum(n1: number, n2?: number) {
return n1 + (n2 || 0);
};
const expr2: (n1: number, n2?: number) => number
= function sum(n1, n2) {
return n1 + (n2 || 0);
};
const expr3: (n1: number, n2?: number) => number
= (n1, n2) => n1 + (n2 || 0);
3. ...(전개 연산자)
function sum(...rest: number[]): void {
console.log(rest);
}
sum(1, 2, 3, 4);
function printValue(...rest: [number, string, number, string]): void {
console.log(rest);
}
printValue(1, "a", 2, "b");
const expr = function printValue(
...rest: [number, string, number, string]
): void {
console.log(rest);
};
const expr2: (...rest: [number, string, number, string]) => void = function (
...rest
) {
console.log(rest);
};
4. 콜백함수
function printUser(callback: (name: string) => void): void {
callback("john");
}
printUser((name) => {
console.log(name);
});
const expr = function printUser(callback: (name: string) => void): void {
callback("john");
};
const expr2: (callback: (name: string) => void) => void = function (
callback
) {
callback("john");
};
function compareNumbers(
n1: number,
n2: number,
callback: (result: string) => void
): void {
if (n1 === n2) {
callback("equal");
} else {
callback("not equal");
}
}
const expr = function compareNumbers(
n1: number,
n2: number,
callback: (result: string) => void
): void {
if (n1 === n2) {
callback("equal");
} else {
callback("not equal");
}
};
const expr2: (
n1: number,
n2: number,
callback: (result: string) => void
) => void = function (n1, n2, callback) {
if (n1 === n2) {
callback("equal");
} else {
callback("not equal");
}
};
compareNumbers(10, 20, (result) => {
console.log(`the numbers are ${result}`);
});
function processArray(arr: number[], callback: (item: number) => void): void {
for (const item of arr) {
callback(item);
}
}
const expr = function processArray(
arr: number[],
callback: (item: number) => void
): void {
for (const item of arr) {
callback(item);
}
};
const expr2: (arr: number[], callback: (item: number) => void) => void =
function processArray(arr, callback) {
for (const item of arr) {
callback(item);
}
};
const expr3: (arr: number[], callback: (item: number) => void) => void = (
arr,
callback
) => {
for (const item of arr) {
callback(item);
}
};
processArray([1, 2, 3, 4], (item) => {
console.log(item * 2);
});
function findInArray(
arr: number[],
condition: (item: number) => boolean,
callback: (result: number) => void
): void {
for (const item of arr) {
if (condition(item)) {
callback(item);
return;
}
}
console.log("not found");
}
const expr = function findInArray(
arr: number[],
condition: (item: number) => boolean,
callback: (result: number) => void
): void {
for (const item of arr) {
if (condition(item)) {
callback(item);
return;
}
}
console.log("not found");
};
const expr2: (
arr: number[],
condition: (item: number) => boolean,
callback: (result: number) => void
) => void = function findInArray(arr, condition, callback) {
for (const item of arr) {
if (condition(item)) {
callback(item);
return;
}
}
console.log("not found");
};
const expr3: (
arr: number[],
condition: (item: number) => boolean,
callback: (result: number) => void
) => void = (arr, condition, callback) => {
for (const item of arr) {
if (condition(item)) {
callback(item);
return;
}
}
console.log("not found");
};
findInArray(
[10, 20, 30, 40],
(item) => item > 25,
(result) => {
console.log(`found value: ${result}`);
}
function createMultipler(factor: number): (num: number) => number {
return (num) => num * factor;
}
const func = createMultipler(10);
console.log(func(2));
5. never
타입
- 절대 반환되지 않는 함수에서만 사용
- 반환값에서만 사용하는 타입
- 무한루프에 빠지는 경우 (실무에서는 없다고 보면 됨)
function infinityLoop(): never {
while (true) {}
}
function throwError(message: string): never {
throw new Error(message);
}
< 04. 타입 오퍼레이터(type operator) >
- 연산자
or (|)
유니온 타입(union type)
let value: number | string | boolean = 10;
value = "a";
value = true;
let obj: { name: string; age: number } | { skill: string } = {
name: "john",
age: 20,
};
obj = { skill: "front" };
let arr: number[] | string[] = [1, 2, 3];
arr = ["a", "b", "c"];
let mixArr: (string | number)[] = [1, "a", 2, "b"];
and (&)
인터섹션 타입(intersection type)
- 기본 타입에는 사용할 수 없음
- 예를 들어 문자열이면서 숫자인 타입은 없으므로
- 객체에서 사용
let value: { name: string; age: number } & { skill: string } = {
name: "john",
age: 20,
skill: "front",
};
let value2: { name: string; age: number } & { skill: string; name: number } =
{
age: 20,
skill: "front",
};
let value3: { name: string; address: { city: string } } & {
address: { zipcode: number };
} = {
name: "john",
address: {
city: "seoul",
zipcode: 111,
},
};
1차 프로젝트 다같이 수정하시나요??