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?