2015-04-07 1 views
0

Я написал этот код, думая, что типов Союза были возможны таким образом:Машинопись TS2322 ошибки: Union типа в своей очереди функции значения

public static template(templateName, data): [string, boolean]{ 
     var templateFullPath = Template.basePath + Template.templatesFolder + '/' + templateName + Template.templatesAfter + Template.ext; 
     if(Template.exists(templateFullPath)){ 
      try{ 
       return (Template._load(templateFullPath))(data); 
      }catch(e){ 
       console.error('Template ' + templateFullPath + ' could not be loaded.'); 
       console.error(e); 
      } 
     }else{ 
      console.error('Template ' + templateFullPath + ' could not be found.'); 
     } 

     return false; 
    } 

Но я получаю следующее сообщение об ошибке:

Using tsc v1.4.1

error TS2322: Type 'boolean' is not assignable to type '[string, boolean]'. Property '0' is missing in type 'Boolean'.

Так что, возможно, функция, возвращающая либо логическое значение, либо строку, не может использовать any?

Doc TS: http://blogs.msdn.com/b/typescript/archive/2014/11/18/what-s-new-in-the-typescript-type-system.aspx

В то же время, я буду использовать any

+0

Вы можете объявить возвращаемый тип 'string' и вернуть' null' при ошибке. – Paleo

+3

'[string, boolean]' - тип кортежа, который будет иметь строку 'string' в позиции 0 и' boolean' в позиции 1. Тип объединения будет 'string | boolean'. – Fenton

+0

Правильно! Таким образом, можно вернуть переменную, которая может иметь один или другой тип, это просто мой способ написать это неправильно, не так ли? Я пробовал и работает. – Vadorequest

ответ

1

Аргументация типов союза является для разрешения для различных типов параметров, а не для возвращаемых значений.

Подумайте, как использовать типы соединений как перегрузки для функций.

Возьмем, например, случай использования в ссылке вы предоставили:

function formatCommandline(c: string[]|string) {... 

Но если вы пытаетесь применить, что функция может возвращать несколько типов, то это делает эту функцию трудно для абонентов этой функции трудно использовать ,

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

+0

Спасибо за подтверждение! – Vadorequest

Смежные вопросы