JiSoo's Devlog

[타입스크립트로 블록체인 만들기] Overview of Typescript 본문

Frontend/Typescript

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

지숭숭숭 2024. 3. 31. 12:14

타입스크립트는 자바스크립트 기반으로 만들어진 언어

타입 안정성이 가장 큰 장점

strongly typed(강타입) 프로그래밍 언어

타입스크립트는 작성한 코드가 자바스크립트로 변환된다

 

타입 시스템

- 명시적 정의(변수 선언 시 타입 정의) -> Type Checker에게 타입을 추론하는 것을 허용

let a : boolean = true

let b : number[] = []
b.push(1)

 

- 변수만 생성

let a = "hello"

 

optional

const player : {
    name: string,
    age?:number
} = {
    name: "jisoo"
}

 

player.age가 undefined일 가능성 체크 ↓

if(player.age && player.age < 10) {
}

 

: 앞에 ? 붙이면 optional parameter 지정 가능

 

Alias 타입

객체 타입뿐만 아니라 모든 타입에 이름 지정 가능

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

const jisoo : Player = {
	name: "jisoo"
}

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

 

함수에서는

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

function playerMaker1(name:string) : Player {
    return {
        name
    }
}

const playerMaker2 = (name:string) : Player => ({name})

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

name:string 처럼 argument에 타입 지정

함수 return값의 타입 지정하려면 : Player 부분처럼! 콜론 뒤에 타입

{name} 이건 object를 리턴한다는 뜻

: 타입

 

readonly 속성을 타입에 추가 가능

type Player = {
    readonly name:string
    age?:number
}

const playerMaker = (name: string): Player => ({name})

const nico = playerMaker("nico")
🚫 nico.name = "aa"
const numbers: readonly number[] = [1, 2, 3, 4]
🚫 numbers.push(1)

readonly가 있으면 최초 선언 후 수정 불가

 

Tuple은 정해진 갯수와 순서에 따라 배열 지정 가능

readonly도 사용 가능 -> readonly[...] 형태

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

 

 

any는 타입스크립트로부터 빠져나오고 싶을 때 쓰는 타입, 아무 타입

보호장치 비활성화 -> 좋은 방식 X

 

undefined는 선언 X 할당 X

null은 선언 O 할당 X

 

unknown은 변수의 타입을 미리 알지 못 할 때 사용

let a:unknown

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

 

void는 아무것도 return 하지 않는 함수 -> 따로 지정할 필요 X

함수가 작업을 완료하고 반환할 필요가 없음을 나타낸다

콘솔에 메시지를 출력하거나 파일에 쓰기 등의 일 수행 가능

function hello() {
    console.log('x')
}
const a = hello()
🚫 a.toUpperCase()

 

never은 함수가 반환하지 않는 다는 것을 나타낸다

런타임 오류를 throw하거나 무한루프에 빠지는 등의 예외적인 상황에서 사용

반환값이 없는 게 아니라 함수가 반환되지 않는다는 것을 나타내는 반환 유형

function hello():never {
    throw new Error("zzz")
    🚫return "a"
}

function temp(name:string|number):never {
    if(typeof name === "string"){
        name
    } else if(typeof name === "number"){
        name
    } else {
        name
    }
}

인자가 제대로 전달되었다면 else로 올 수 없다

 

-> void는 함수가 작업을 수행하고 반환하지만 반환값이 없는 경우 사용되고 never은 함수가 반환되지 않는 경우 사용된다

 

 

 

 

728x90