Naujas typas kito typo pagrindu

type Point = {x: number, y:number}
type P = keyof Point

Funkcijos grazinamo objecto typas iš funcijos

function MyF() {
  return {a:1}
}

type K = ReturnType<typeof MyF>

razultate: K tipas {a: number}

jeigu strėlinė funkcija, tai nereikia konvertuoti funkcijos

function MyFType = () =>  {
  return {a:number}
}
type K = ReturnType<MyFType >

Jeigu norime gauti typa masyvo elemento

const MyArray = [
  {name: 'MyName', age: 30}
]

type Person = typeof MyArray[number]
type Age = typeof MyArray[number]['age']
type MessageOf<T> = T extends {message: unknown} ? T['message'] : never

tikriname ar T (generic) extendina nurodyta salyga, jeigu taip tai imame T['message'], jeigu ne - never

interface Email {
  message: string
}
 
interface Cat {
  sound: string
}

type EmailMessageContent = MessageOf<Email> -> string
type CatMessageContent = MessageOf<Cat> -> never
interface Test {
  [key: string]: number
}

kai neribotas kiekis elementu

type OptionFlags<Type> = {
  [Property in keyof Type]: boolean
}

naujas type ims elementų key iš Type ir tures boolean reikšmes