Если типу присвоить значение, то оно станет литеральным типом.
type CarNames = 'bmw' | 'mercedes';
const cars: CarNames[] = ['bmw', 'mercedes', 'zhiguli'];
// ^^^^^^^
// TypeError: Type '"zhiguli"' is not assignable to type 'CarNames'.
подробнее и с примерами
в официальной документации.
Соответственно, отвечая на первый вопрос: литеральный тип - это конкретное значение одного из примитивных типов. Хотя в хэндбуке говорится о литеральных типах только для строк и чисел, можно назвать "литеральным" и значения null, undefined, true, false, но в этом нет особо смысла.