본문 바로가기
Programming Language/TypeScript

[TypeScript] 정리 - 2

by hwan20c 2024. 3. 26.

 

다형성과 오버로딩

type Add = (a:number, b:number) => number;
-> call signature라고 한다.

type Add = {
    (a:number, b:number) : number;
}
이런 식으로도 변경할 수 있다.

----------------------------------------------------------------------------

오버로딩은 함수가 여러 개의 콜 시그니쳐를 가질 때를 말한다.

type Add = {
    (a:number, b:number) : number
    (a: number, b:number, c?: number):number,
}

const add:Add = (a,b,c?:number) => {
    return a+b
}

-> 파라미터가 다를 때 이런 식으로 할 수 있다.

----------------------------------------------------------------------------

제네릭은 타입의 placeholder와 같은 것...


type SuperPrint = {
    <TypePlaceholder>(arr: TypePlaceholder[]):void // < > 사이에는 변수명을 쓰는 거므로 아무거나 올 수 있다 보통 T를 쓰는 경우가 많다.


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, "hello"]);

이런 식을 제네릭을 쓰게 되면 해당 배열 안에 타입이 어떤 걸 들어와도 제네릭으로 먼저 분석하고 진행하기 때문에, 오류가 나지 않는다.

type SuperPrint = {
    <TypePlaceholder>(arr: TypePlaceholder[]): TypePlaceholder
}

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"]);

이런 식으로도 가능하다.

----------------------------------------------------------------------------


추상클래스 안에서 추상클래스를 만들 수 있지만, 메서드의 콜 시그니쳐만 써야 한다

abstract class User {
    constructor(
        private firstName:string,
        private lastName:string,
        private nickname:string
    ) {}
    abstract getNickName():void
    getFullName() {
        return `${this.firstName} ${this.lastName}`;
    }
}

이런 식으로 해야 한다.

private 말고 protected로 하면 바깥에서 받는 값을 바꿔줄 수 있다. protected는 extends 안에서만 바꿀 수 있고,
public은 모든 곳에서 재사용이 가능하다.


----------------------------------------------------------------------------

interface는 type과 비슷하지만 다르다
type 키워드가 interface보다 할 수 있는 특징이 더 많다.
오브젝트의 모양을 정할 때 인터페이스를 사용하는 게 조금 더 이해하기 쉽다.
인터페이스를 상속받으면 상속된 필드값의 생성자를 public으로만 지정해줘야 한다.

----------------------------------------------------------------------------

tsconfig.json을 사용해서 typescript를 사용해서 코딩한다는 것을 노드패키지에 알린다.
tsconfig.json을 이용하여 javascript의 버전 같은 것도 지정할 수 있다. 

----------------------------------------------------------------------------

import crypto from "crypto"; -> 를 하면 보통
crypto.d.ts가 없어서 에러가 나는데 최신 노드 모듈을 이용하면 이거까지 설치가 되기 때문에 에러가 나지 않는다.

만약 import를 했는데 d.ts 파일이 없는 패키지가 있다면,
https://github.com/DefinitelyTyped/DefinitelyTyped 이 사이트에 가서 찾아보면 되는데,
위와 같은 crypto는 노드모듈에 있는 패키지기 때문에
npm i -D @types/node
명령어를 사용해서 nodejs를 위한 타입들을 다 설치해 주면 된다.

'Programming Language > TypeScript' 카테고리의 다른 글

[TypeScript] 정리 - 1  (0) 2024.03.26

댓글