[타입스크립트로 블록체인 만들기] #2. Overview of Typescript

min5x5·2023년 8월 29일
post-thumbnail

#2.0 How Typescript Works

Typescript is a strongly typed programming language.
Node.js는 JS, TS 모두 이해할 수 있다.
TS 코드에 에러가 있으면, 그 코드는 JS로 컴파일되지 않는다.

만약 타입스크립트가 성공적으로 컴파일돼서 자바스크립트 코드를 주면,
타입스크립트 코드도 제대로 작성된 거고,
데이터 타입에도 문제가 없고,
자바스크립트 코드에 버그가 전혀 없다는 뜻이다.

#2.1 Implicit Types VS Explicit Types

보통은 변수를 선언하고 타입을 변경하지 않는다.
변경하는 게 이상한 코드임!

타입스크립트는 타입을 추론해준다.
타입을 설정해주면, Type Checker가 타입을 체크해준다.

let b : boolean = True

#2.2 Types of TS part1

object의 타입 정의

const player : {
	name: string,
    age?: number // number | undefined
} = {
	name: 'nico'
}

if(player.age && player.age < 10){ // cuz player.age가 undefined일 수 있음

}

타입을 미리 정의하면,

type Age = number;
type Name = string;
type Player = {
	name: Name,
    age?: Age
}

const nico: Player = {
	name: 'nico'
}

const lynn : Player = {
	name: 'lynn',
    age: 12
}

함수를 사용하면,

type Age = number;
type Name = string;
type Player = {
	name: Name,
    age?: Age
}

function playerMaker(name:string): Player { // 괄호 뒤에 함수의 return값에 대한 type
	return {
    	name:
    }
}

const nico = playerMaker("nico")
nico.age = 12

#2.3 Types of of TS part2

readonly라는 보호장치가 있다. 변수 값을 변경할 수 없다.

type Age = number;
type Name = string;
type Player = {
	readonly name: Name,
    age?: Age
}

Tuple, 요소 갯수/순서가 맞아야한다.

const player: [string, number, boolean] = ["nico", 1, true]

any, type의 한종류이다.
ts로부떠 빠져나오고 싶을 때 쓰는 타입이다. 아무 타입이나 될 수 있다.
사용하지 않는 것이 좋다. 하지만 가-끔 써야할 때가 있다.

#2.4 Types of TS part3

Typescript의 중요한 포인트는 Type Checker와 소통하는 것이다.

unknown
변수의 타입을 미리알 수 없을 때 사용한다.

let a: unknown;

if (typeof a === 'number'){
	let b = a + 1;
}
if (typeof a === 'string'){
	let b = a.toUpperCase();
}

void
아무것도 return하지 않는 함수를 뜻한다.
따로 지정해줄 필요는 없다.

function hello(): void{
	console.log('x')
}

never
함수가 절대 return하지 않을 때 발생한다.

function hello(): never{
	throw new Error('xxx')
}

실행되지않는 if, elif, else문은 타입이 never일 수 있다.

function hello(name: string | number) {
	if(typeof namae === "string"){
    	name = 'a'
    } else if (typeof name === "number") {
    	name = 12
    } else { // else문은 타입이 never이다.
        name = null
    }
profile
삶에 변화를 만드는 개발자

0개의 댓글