IT/DEV Study

[Nomad Coders] TypeScript로 블록체인 만들기 #3 정리

Ella.J 2022. 6. 15. 17:45
728x90
반응형

이전강의 보러가기.

2022.06.15 - [IT] - [Nomad Coders] TypeScript로 블록체인 만들기 #1, #2 정리

 

[Nomad Coders] TypeScript로 블록체인 만들기 #1, #2 정리

노마드 코더 무료 강의 타입스크립트로 블록체인 만들기 강의 정리 포스팅 https://nomadcoders.co/typescript-for-beginners 타입스크립트로 블록체인 만들기 – 노마드 코더 Nomad Coders Typescript for Beginn..

ella-devblog.tistory.com


#3 FUNCTIONS

#3.0 Call Signatures

위에 있는 것이 Call Signatures

type Add = (a:number, b:number) => number;

const add:Add = (a, b) => a+b

이런식으로 Signature type 만들 있음.


#3.1 Overloading

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

}

-

파라미터 타입이 다른 경우

type Config = {

    path: string

    state: object

}

type Push = {

    (path:string):void

    (config:Config):void

}

const push:Push = (config) => {

    if (typeof config === "string") console.log(config)

    else {

        console.log(config.path, config.state)

    }

}

-

파라미터 개수가 다른 경우

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)


#3.2 Polymorphism(다형성)

: how generic help you

concrete type : number, boolean, string 등등

type SuperPrint = {

    (arr: number[]): void

    (arr: boolean[]): void

    (arr: string[]): void

    (arr: (number|boolean)[]): void

}

const superPrint: SuperPrint = (arr) => {

    arr.forEach(i => console.log(i))

}

superPrint([1, 2, 3, 4])

superPrint([true, false, true])

superPrint(["a", "b", "c"])

superPrint([1, 2, true, false])

위처럼 사용할 것으로 예상되는 type을 일일히 다 적어줘야함.

귀찮게 언제 다 적고 있음..? 그래서,, 쓰는게 generic!

-

generic :  type placeholder 같은 것. 어떤 type이 오는지 확인해서 알아서 맞춰줌.

generic 쓰려면 <>로 표시.

type SuperPrint = {

    <TypePlaceholder>(arr: TypePlaceholder[]): void

}

const superPrint: SuperPrint = (arr) => {

    arr.forEach(i => console.log(i))

}

superPrint([1, 2, 3, 4])

superPrint([true, false, true])

superPrint(["a", "b", "c"])

superPrint([1, 2, true, false])

이런 식으로작동됨. Super Super Comfortable, right?

ts 함수에서 확인된 인수 타입으로 알아서 확인해줌

-

type SuperPrint = <T>(arr: T[]) => T

const superPrint: SuperPrint = (arr) => arr[0]

const a = superPrint([1, 2, 3, 4])

const b = superPrint([true, false, true])

const c = superPrint(["a", "b", "c"])

const d = superPrint([1, 2, true, false, "hello"])

간단하게 T 써도 .


#3.3 Generics Recap

type SuperPrint = <T, M>(arr: T[], b:M) => T

const superPrint: SuperPrint = (arr) => arr[0]

const a = superPrint([1, 2, 3, 4], "x")

generic이 2 이상일 수도 있음.

위에서 superPrint에 인수를 2개 generic으로 받고 있는데,

const b, c, d는 인수가 1개이기 때문에 에러 발생한 것.


#3.4 Conclusions

Generics Call Signature 이외에 사용되는 방법 예시

Generic 굉장히 많이 사용됨.

function superPrint<T>(a: T[]) {

    return a[0]

}

const a = superPrint([1, 2, 3, 4])

const b = superPrint([true, false, true])

const c = superPrint(["a", "b", "c"])

const d = superPrint([1, 2, true, false, "hello"])

-

type Player<E> = {

    name:string

    extraInfo:E

}

type nicoExtra = {

    favFood:string

}

type NicoPlayer = Player<nicoExtra>

const nico: NicoPlayer = {

    name:"nico",

    extraInfo: {

        favFood:"kimchi"

    }

}

const lynn: Player<null> = {

    name:"lynn",

    extraInfo:null

}

-

function printAllNumbers (arr: Array<number>) {}


다음강의 보러가기.

2022.06.16 - [IT] - [Nomad Coders] TypeScript로 블록체인 만들기 #4 정리

 

[Nomad Coders] TypeScript로 블록체인 만들기 #4 정리

TS to JS 코드 연습 #4 CLASSES AND INTERFACES #4.0 Classes ts에서 object oritented 구현 ts에서 class 만들기 class Player { constructor ( private firstName:string, private lastName:string, public nick..

ella-devblog.tistory.com

 

728x90
반응형