// Created on savesnippets.com ยท https://savesnippets.com/hHLo3FljVhlTJH // Extract the resolved value of a Promise (or leave non-promise types alone). type Unwrap = T extends Promise ? U : T; type A = Unwrap>; // string type B = Unwrap; // number // Extract function argument types as a tuple. type Args = F extends (...args: infer P) => any ? P : never; type FirstArg = Args[0]; const greet = (name: string, formal: boolean) => `Hello, ${name}`; type Greeting = ReturnType; // string type GreetArgs = Args; // [string, boolean] type WhosName = FirstArg; // string