본문 바로가기
IT/typescript

[typescript] 함수타입(Function Type) 인자형

by 내일은교양왕 2024. 8. 14.

이게 왜 가능하지?

processNumberAndString에서는 string을 받을 수도 있는데, number만 받는 wide에 넣었더니 문법 오류가 나지 않는것일까?

 

function processNumber(x:number) {}

function processNumberAndString(x:number | string) {}

let wide: (x:number) => void

wide = processNumber // Works!
wide = processNumberAndString // Works!

 

when A ≤ B, A → X ≥ B → X

A가 B의 subtype이고 반환형이 같을 때, B를 인자로 갖는 함수는 A를 인자로 갖는 함수의 서브타입

 

processNumberAndString에서 number 또는 string을 받는 경우니까 내부 로직안에서 number 일때 로직이 분명히 있을 것이다. 그렇기에 가능

 

반대의 경우

function processNumber(x:number) {}
let narrow: (x:number | string) => void

narrow = processNumber // Doesn't work!

 

타입 에러가 발생한다. 그 이유는 processNumber는 number만 가능한데, narrow는 string까지 대응을 해야하기 때문이다.

 


인자의 수가 불일치 하는 경우

function consumeOneArg(x:any) {}
let wide: (x:any, y:any) => void

wide = consumeOneArg
wide(0, 1) // Works!


function consumeTwoArg(x:any,y:any) {}
let narrow: (x:any) => void

narrow = consumeTwoArg // Doesn't work!

 

인자 2개 필요한 함수에 인자 1개만 필요로 하는 함수를 넣었더니 정상동작 한다.

이유는 두번째 인자를 무시하고 실핼 할 수 있기 때문이다. (javascript 문법상)

 

반면, 인자 1개 필요한 함수에 인자 2개 필요하는 함수를 넣었더니 에러가 발생한다.

구현체에서 2개가 필요한 상황인데 1개만 주면, 실행이 되긴 할텐데 원하는 값이 나오지 않을 확률이 높으니 컴파일에서 아에 에러를 발생하는 것처럼 보인다. (javascript내에서는 인자가 2개여도 1개만 넣어도 실행 됨. 단, Runtime error가 발생할 수 있음)

 

https://d2.naver.com/helloworld/7472830

 

 

 

 

 

'IT > typescript' 카테고리의 다른 글

[typescript] fattenObject 함수 type 만들기  (0) 2024.08.21
[typescript] infer  (0) 2024.08.14
[typescript] subtype  (0) 2024.08.14
[typescript] pnpm monorepo에서 paths 설정하기  (1) 2024.07.15
[typescript] is  (1) 2024.06.12