аргумент type alias'ом для базового типа?
                  
                  
                  К примеру, необходима функция, которая будет принимать аргумент только данного type alias, но не базового.
                  
                  
                  
                  
                  
                  type Token = string
                  
                  
                  const str = 'string'
                  
                  
                  const token: Token = 'token'
                  
                  
                  const decode = (token: Token) => ...
                  
                  
                  // ошибок нет
                  
                  
                  decode(token)
                  
                  
                  // ошибок тоже нет, а надо чтобы typescript ругался
                  
                  
                  decode(str)
                  
                  
                  
                  
                  
                  В этом случае функция decode будет принимать и базовый тип string, и type alias Token (собственно, на то он и alias по смыслу). Можно решить проблему, использовав intersection базового и литерального типов (выглядит неоч, но с этим можно смириться):
                  
                  
                  type Token = string & 'Token'
                  
                  
                  const str = 'string'
                  
                  
                  const token = 'token' as Token
                  
                  
                  const decode = (token: Token) => ...
                  
                  
                  // ошибок нет
                  
                  
                  decode(token)
                  
                  
                  // Argument of type '"string"' is not assignable to parameter of type '"Token"'
                  
                  
                  decode(str)
                  
                  
                  Проверка типов работает, то, что надо.
                  
                  
                  
                  
                  
                  Вопрос: как должен выглядеть предикат isToken в таком случае?
                  
                  
                  const isToken = (token: any): token is Token => ???
                  
                  
                
элиас сам по себе кроме названия ничего не содержит если нет операцией типа юниона или пересечения он даже с точки зрения компилятора сразу предстает как исходный тип погуглите typescript brand types: будет улучшенная версия того что вы придумали
Обсуждают сегодня