TypeScript: tipos de cadena específicos

Estoy buscando una mejor manera de distinguir entre diferentes tipos de cadenas en mi programa, por ejemplo, rutas absolutas y rutas relativas. Quiero poder hacer que las funciones tomen o devuelvan cierto tipo con un error del compilador si lo estropeo.

Por ejemplo,

function makeAbsolute(path: RelativePath): AbsolutePath {
}

donde AbsolutePath y RelativePath y realmente solo cadenas. Experimenté con alias de tipo, pero en realidad no crean un nuevo tipo. También interfaces -

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

pero como esas interfaces son compatibles, el compilador no me impide mezclarlas. No veo cómo puedo hacer esto sin agregar una propiedad a la interfaz para que no sea compatible (y realmente agregar esa propiedad a la cadena o cambiarla) o usar una clase de contenedor. ¿Alguna otra idea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta