TypeScript - конкретные типы строк
Я ищу лучший способ различать различные типы строк в моей программе - например, абсолютные пути и относительные пути. Я хочу, чтобы функции могли принимать или возвращать определенный тип с ошибкой компилятора, если я испорчу это.
Например,
function makeAbsolute(path: RelativePath): AbsolutePath {
}
где AbsolutePath и RelativePath и на самом деле просто строки. Я экспериментировал с псевдонимами типов, но на самом деле они не создают новый тип. Также интерфейсы -
interface AbsolutePath extends String { }
interface RelativePath extends String { }
но так как эти интерфейсы совместимы, компилятор не мешает мне смешивать их. Я не понимаю, как я могу сделать это, не добавляя свойство в интерфейс, чтобы сделать их несовместимыми (и не добавляя это свойство в строку, или не применяя его), или используя класс-оболочку. Есть другие идеи?