노마드 코더 [Typescript] 기초 - 블록체인 만들기
코딩쟁이들이라면 들어봤을 법한 유튜버 '노마드 코더'의 Typescript 무료 강의로 아래 사이트에 들어가면 볼 수 있다.
https://nomadcoders.co/typescript-for-beginners
Javascript에 Types를 선언해 추적이 안되던 error나 type들에 대해 쉽게 알 수 있고, javascript의 superset이기 때문에 다른 라이브러리들에 적용해도 쉽게 사용이 가능하다. Javascript를 객체지향적으로 사용하고 싶을 때 용이하며 나 같은 윈도우 개발자 (C++/C#)가 배우는데 러닝커브가 그렇게 높진 않았다. 다만, type을 선언해줌으로써 생산성 측면에서는 떨어질 수 있으나 애초에 에러를 먼저 잡아낼 수 있기에 뭐가 더 낫다고 할 순 없지만 Nest.js, Next.js를 쓰기위해 미리 배우는 것도 나쁘지 않아 강의를 들어보았다.
Typescript를 사용하기 위해선 Node.js 설치가 필수이므로 아래 설치 방법을 보고 설치하면 된다.
2022.06.29 - [개발 Study/Node, js, react] - [Node.js] Node.js 및 npm 설치하기
1. Type 선언 방법
변수를 선언한 후 ':' 콜론을 입력 한 뒤에 type을 선언한 후 type에 맞는 값을 할당해 준다. 선언된 type에 맞는 값이 아닌 경우 에러가 표시된다. (Javascript와 다른점)
let a : string = "hello";
let b : boolean = false;
let c : number[] = [1, 2, 3];
c.push(4);
객체 타입은 아래와 같이 선언할 수 있다. '?'표시는 반드시 넣어도되지 않는 값을 뜻한다.
type Player = {
name:string,
age?:number
}
const player : Player = {
name : "nico",
age : 12
}
const playerMaker = (name:string) : Player => ({name});
const nico = playerMaker("nico");
nico.age = 12;
객체로 선언된 nico는 기존 javascript와 같이 type에 맞는 값으로 값을 재할당 해줄 수 있다.
2. any, unknown, void, never 타입
any는 '어떤 타입이든' 의 의미를 담고 있어서 기존 Javascript처럼 typeless로 사용하고 싶은 경우에 에러없이 사용된다.
unknown은 '알려지지 않은'의 의미를 담고 있어서 아래와 같이 타입이 뭐냐에 따라 분기를 나눠서 값을 할당할 수 있다. 그러나 타입 지정을 해주지 않고 그냥 사용하는 경우 에러가 날 수 있다.
let u:unknown;
if (typeof u === 'number') {
let i = u + 1;
}
if (typeof u === 'string') {
let b = u.toLowerCase();
}
void는 가장 자주 쓰이며 return 값이 없는 함수 타입으로 사용된다.
never. 함수가 절대 return을 하지 않는 경우 사용된다. ex)error를 throw하는경우
3. Call signature
type을 미리 선언해 두고 그 타입을 이용하여 여러 함수들을 생성할 수 있다. parameter와 return 값의 Type을 미리 선언한다. call signature를 여러개 선언하고 오버로딩하는 방식으로 사용할 수도 있다.
type Add = (a:number, b:number) => number;
const add:Add = (a, b) => a + b
type Add = {
(a:number, b:number) : number
(a:number, b:string) : number
}
const add: Add = (a, b) => {
if (typeof b === "string") return a
return a + b
}
1-1. Overloading
type Config = {
path: string,
state: object
}
type Push = {
(path:string):void
(confing:Config):void
}
const push:Push = (config) => {
if (typeof config === "string") console.log(config)
else {
console.log(config.path)
}
}
type Add = {
(a:number, b:number) : number
(a:number, b:number, c?:number) : number,
}
const add:Add = (a, b, c?:number) => {
if (c) return a + b+ c
return a + b
}
add(1, 2)
add(1, 2, 3)
'개발 Study > JS,TS' 카테고리의 다른 글
[Javascript] Vanilla JS로 크롬 앱 만들기 - Review(2) (0) | 2022.08.12 |
---|---|
[Javascript] Vanilla JS로 크롬 앱 만들기 - Review(1) (1) | 2022.08.11 |
[JavaScript] let/var/const의 차이 (0) | 2022.08.01 |
댓글