https://github.com/hyoungwonkang/TypeScript
class Counter{
constructor(runEveryFiveTimes){
this.counter =0;
this.callback = runEveryFiveTimes;
}
increase() {
this.counter++;
console.log(this.counter);
if (this.counter%5 === 0){
this.callback && this.callback(this.counter);
}
}
}
function printSomething(num) {
console.log(`Wow! ${num}`);
}
function alertNum(num){
alert(`alert! ${num}`)
}
//서로 다른 기능을 수행하는 오브젝트
const printCounter = new Counter(printSomething);
const alertCounter = new Counter(alertNum);
Primitive: number, string, booolean, symbol, null, undefined
Object: function, Array
let age: number | undefined; // 옵셔널 타입. number와 undefined 동시에!
function find(): number | undefined{
찾으면 숫자, 없으면 undefined
return 1; //숫자를 리턴하거나
// return undefined; //undefined를 리턴합니다!
}
let person: string | null; // 옵셔널 타입. number와 undefined 동시에!
let notSure: unknown = 0;
notSure = "he";
notSure = true;
let anything: any = 0;
anything = "hello";
function print(): void{ // void 생략 가능!
console.log('hello');
return;
}
let unusable: void = undefined; // 활용성이 없어 이렇게 선언하지 않는다!
function throwError(message:string): never {
//message -> server (log)
throw new Error(message);
while(true){} //무한 루프
// return 1;
}
// let neverEnding: never; 절대 사용하지 않음
let obj: object
function acceptSomeObject(obj: object) {}
acceptSomeObject({name: 'ellie'})
acceptSomeObject({animal: 'dog'})
//JavaScript 똥!
function jsAdd(num1, num2) {
return num1 + num2;
}
//TypeScript 빛!
function add(num1: number, num2: number): number {
return num1 + num2;
}
//JavaScript 똥!
function jsFetchNum(id) {
// code...
// code...
// code...
return new Promise((resolve, reject) => {
resolve(100);
});
}
//TypeScript 빛!
//안정적인 개발을 위한 static함을 사용. 문서화에 도움이 됨.
function fetchNum(id: string): Promise<number> {
// code...
// code...
// code...
return new Promise((resolve, reject) => {
resolve(100);
});
}
// 자바 스크립트에서도 사용할 수 있고 타스에서 더 활용도를 높일 수 있는 타입이 더해진 함수 정의 방법
function printName(firstName: string, lastName?: string) {
console.log(firstName);
console.log(lastName);
}
printName("Steve", "Jobs");
printName("Ellie"); // 인자 갯수와 정해진 타입으로 전해줘야 한다.
// printName("Anna", undefined);
function printMessage(message: string = "default message") {
//타입 스크립트에서 default값 전달 가능.
console.log(message);
}
printMessage();
function addNumbers(...numbers: number[]): number { // ... (rest param)로 numbers라는 배열을 받아옴. number[]: 숫자타입의 배열.
return numbers.reduce((a, b) => a + b);
}
console.log(addNumbers(1, 2));
console.log(addNumbers(1, 2, 3, 4));
console.log(addNumbers(1, 2, 3, 4, 5, 0));
}
const fruits: string[] = ["apple", "banana"];
const scores: Array = [1, 3, 4];
function printArray(fruits: readonly string[]) {
// readonly를 사용하려면 string 다음에 배열 표시가 있는 문법이용.
// 즉 불변성 때문에 string[]을 사용하는 경우가 더 많음.
let student: [string, number];
student = ['name', 123]
student[0] // name
student[1] // 123
//Tuple을 스면 인덱스를 읽어야 하는 가독성이 떨어짐.
//object destructuring을 이용.
const [name, age] = student; // student안에 첫번째 값이 name으로 두번째값이 age로 할당 됨.
}
const [count, setCount] = useState(0);
: 동적으로 뭔가 좀 관련 있는 다른 타입의 데이터를 묶어서 사용자가 이름을 정의해서 써서, Tuple을 잘 사용한 예.
오늘은 여러 내적갈등이 많았습니다. 남에게 끌려가야 하나 아님 내가 더 적극적으로 나서야 하나 고민하고 스트레스 받는 한 때 였습니다. 허나 부질 없는 것이었습니다. 그저 열심히 하여도 못 하면 다음에 하면 되는것이고 현재 할 수 있는 것만 하자고 다시 마음을 다잡았습니다. 실전프로젝트는 이제 2틀밖에 안지났고 앞으로의 5주 5일은 해왔고 해나가고 있는 모든 것들을 내 실력으로 만드는 기간인 것 같습니다.
그리고 긴 팀플에서 놓치지 말아야 할 것은 내가 스스로에게 충분히 노력했는지 하루하루 돌아보는 것, 과 동시에 프로젝트에 대한 적당한 주인의식이라 생각합니다. 개발자로서 서비스를 만듬에 있어 프로젝트가 어떻게 유저에게 쓰여질지 생각해야 할 것입니다.