지문이 굉장히 복잡하고 별로다.
매우 간략하게 설명하자면 최종적으로 반환해야 하는 값은 그저 fn 함수에 매개변수 args를 모두 할당하면 끝이다.
다만, 한번만 호출 가능하고 그 이후는 아무것도 반환하지 않는 상태로 만들어야함
type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue };
type OnceFn = (...args: JSONValue[]) => JSONValue | undefined
function once(fn: Function): OnceFn {
let isCalled = false
return function (...args) {
if(isCalled) return undefined
isCalled = true
return fn(...args)
};
}