(일반) 다형성 유형 타이프스크립트

제네릭 형식이란 무엇입니까?

제네릭은 어떤 유형이 해당 유형에 들어갈지 확실히 모를 때 호출 서명을 작성할 때 사용됩니다.

유형 슈퍼프린트 = {
<>(: ()):무효의

}
const 슈퍼프린트:슈퍼프린트 = () =>{
.각각(=>콘솔.통나무())
}

슈퍼프린트((1,2,,4))
슈퍼프린트((진실,거짓,진실,진실))
슈퍼프린트((“asdf”,“비”,“씨”))
슈퍼프린트((1,2,진실,거짓))

<> 안에 넣으면 제네릭 타입이 됩니다.

안에 이름을 쓸 수 있습니다.

제네릭은 유형을 수신할 때 TypeScript에 의해 자동으로 유추됩니다.

이것이 다형성 유형을 지정하는 방법입니다.

예.

유형 슈퍼프린트 = {
<>(: ()):

}
const 슈퍼프린트:슈퍼프린트 = () =>(0)

const= 슈퍼프린트((1,2,,4))
const= 슈퍼프린트((진실,거짓,진실,진실))
const= 슈퍼프린트((“asdf”,“비”,“씨”))
const= 슈퍼프린트((1,2,진실,거짓,“홍대”))

React에서 사용하는 경우 위와 다르게 사용됩니다.

여러 제네릭을 사용하는 경우

유형 슈퍼프린트 = {
<,>(:(),:):

}
const 슈퍼프린트:슈퍼프린트 = () =>(0)

const= 슈퍼프린트((1,2,,4),“엑스”)
const= 슈퍼프린트((진실,거짓,진실,진실),1)
const= 슈퍼프린트((“asdf”,“비”,“씨”), 거짓)
const= 슈퍼프린트((1,2,진실,거짓,“홍대”),())

# 부가 설명



그렇다면 그냥 any를 넣는 것과 Generic의 차이는 무엇일까?

type SuperPrint = {
(arr: any()): any
}

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

let a = superPrint((1, "b", true));
// pass
a.toUpperCase();

any를 사용하면 위와 같은 경우에도 에러가 발생하지 않는다

type SuperPrint = {
(arr: T()): T
}

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

let a = superPrint((1, "b", true));
// error
a.toUpperCase();

Generic의 경우 에러가 발생해 보호받을 수 있다
* Call Signature를 concrete type으로 하나씩 추가하는 형태이기 때문!
type SuperPrint = { (arr: T(), x: M): T } const superPrint: SuperPrint = (arr, x) => arr(0) let a = superPrint((1, "b", true), "hi"); 위와 같이 복수의 Generic을 선언해 사용할 수 있다