הסקת טיפוס ב-TypeScript לפרמטר של פונקציה פנימית


function makeBox<T, U extends () => (input: T) => number>(value: {
  t: T
  u: U
}) {
  return value
}

makeBox({
  t: 'ada',
  u: () => {
    return (input) => {
      return Number.parseInt(input)
    }
  },
})

הדוגמה הזו תישבר, הקלט יופיע כ-unknown.

עם זאת, אם פשוט נוסיף ארגומנט אחד לפונקציה, זה פתאום יתחיל לעבוד

function makeBox<T, U extends (noop: never) => (input: T) => number>(value: {
  t: T
  u: U
}) {
  return value
}

makeBox({
  t: 'ada',
  u: (_noop) => {
    return (input2) => {
      return Number.parseInt(input2)
    }
  },
})

למה זה כך? מה ההיגיון מאחורי זה?