리터럴 타입은 값 자체가 타입입니다. 타입 자리에 리터럴 값을 표기하면 리터럴 타입이 지정됩니다.
자바스크립트에서 let으로 선언하면 어떤 값이 든지 자유롭게 대입할 수 있습니다. 하지만 타입스크립트에서는 표기한 타입과 일치하는 값만 대입할 수 있습니다.
//타입스크립트는 자바스크립트의 자유도를 희생하는 대신 타입의 안정성을 보장
let str : 'hello' = hello;
str = 'world';

const 를 사용하면 타입스크립트가 알아서 'hello'라고 추론하므로 굳이 let으로 변수를 선언하여 리터럴 타입을 사용할 이유가 없습니다.
함수 리터럴 타입에서는 반환값의 표기법이 다릅니다. 콜론대신 => 를 사용해 표기합니다.
const func : (amount: number, unit: string) => string
= (amount, unit) => amount + unit;
타입스크립트는 대부분의 경우 리터럴 타입을 더 부정확하게 추론합니다. 타입스크립트는 수정 가능성을 염두해두고 타입을 넓게 추론하기 때문에 값이 변하지 않는 것이 확실하다면 as const라는 특별한 접미사를 붙여 사용하는 것이 좋습니다.
const obj:{ name : 'zero' } = {name : 'zero'} //const obj : { name : 'zero' }
const arr: [1, 3, 'five' ] = [1, 3, 'five'] //const arr : (string | number)[]
//접미사 as const 사용
const obj = { name : 'zero' } as const //const obj : { readonly name : 'zero' }
const arr = [1, 3, 'five'] as const //const arr : readonly [1, 3, 'five']
//타입 고정으로 인해 변경 불가
obj.name = 'nero'; //error
arr.push(3); //error