TypeScript - конкретные типы строк

Я ищу лучший способ различать различные типы строк в моей программе - например, абсолютные пути и относительные пути. Я хочу, чтобы функции могли принимать или возвращать определенный тип с ошибкой компилятора, если я испорчу это.

Например,

function makeAbsolute(path: RelativePath): AbsolutePath {
}

где AbsolutePath и RelativePath и на самом деле просто строки. Я экспериментировал с псевдонимами типов, но на самом деле они не создают новый тип. Также интерфейсы -

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

но так как эти интерфейсы совместимы, компилятор не мешает мне смешивать их. Я не понимаю, как я могу сделать это, не добавляя свойство в интерфейс, чтобы сделать их несовместимыми (и не добавляя это свойство в строку, или не применяя его), или используя класс-оболочку. Есть другие идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос