거두절미하고 타입 스클비트에서는 함수 표현식을 사용하는 것이 좋음.
매개변수부터 반환값까지 전체를 함수 타입으로 선언해서 함수 표현식에 재사용 가능
type DiceRollFn = (sides: number) => number;
const rollDice: DiceRollFn = (sides) => {
return sides;
};
// 함수 마다 타입 지정
function add(a: number, b: number) {
return a + b;
}
function sub(a: number, b: number) {
return a - b;
}
function mul(a: number, b: number) {
return a * b;
}
function div(a: number, b: number) {
return a / b;
}
// 함수 시그니처로 타입 통합
type BinaryFn = (a: number, b: number) => number;
const add: BinaryFn = (a, b) => a + b;
const sub: BinaryFn = (a, b) => a - b;
const mul: BinaryFn = (a, b) => a * b;
const div: BinaryFn = (a, b) => a / b;
이렇게 추론한다.

다음과 같은 방식으로 기존 함수의 타입을 추론할 수도 있음.
const checkedFetch: typeof fetch = async (input, init) => {
//...
}