TypeScript - tipos de sequência específicos

Estou procurando uma maneira melhor de distinguir entre diferentes tipos de strings no meu programa - por exemplo, caminhos absolutos e caminhos relativos. Eu quero poder ter funções pegar ou retornar um certo tipo com um erro de compilador se eu estragar tudo.

Por exemplo,

function makeAbsolute(path: RelativePath): AbsolutePath {
}

onde AbsolutePath e RelativePath e realmente apenas strings. Eu experimentei aliases de tipo, mas na verdade eles não criam um novo tipo. Também interfaces -

interface AbsolutePath extends String { }
interface RelativePath extends String { }

mas como essas interfaces são compatíveis, o compilador não me impede de misturá-las. Não vejo como posso fazer isso sem adicionar uma propriedade à interface para torná-los incompatíveis (e realmente adicionar essa propriedade à string ou transmitir em torno dela) ou usar uma classe de wrapper. Alguma outra ideia?

questionAnswers(2)

yourAnswerToTheQuestion