2016-10-01 2 views
1

Я наслаждался типами союзов в машинописном тексте, но я только что ударил свою первую промашку.Отображение из одного типа объединения в другое в машинописных текстах

Это член в вопросе:

organizations: Organization[] | number[]; 

Это то, что я пытаюсь сделать:

let orgs = organziations.map(org => org.id); 

Другими словами, возьмите эту коллекцию <Organization[]> и сопоставить его с его идентификатором так что у меня может быть коллекция <number[]>.

Ошибка, которую я получаю, это [ts] Невозможно вызвать выражение, тип которого не имеет сигнатуры вызова. Правда, карта не знает, с какими типами она имеет дело. К сожалению, ничто из того, что я пробовал до сих пор, помогло составить карту.

+0

Что должно произойти, если оно * - это массив чисел? '(org: Organization | number)' внутри этой карты. – jonrsharpe

ответ

1

Вы должны использовать type guard, чтобы проверить, имеет ли переменная нужный тип. Например:

interface Organization { 
    id: string 
} 

function isOrganizationList(list: any[]): list is Organization[] { 
    return list.length === 0 || list[0].id !== undefined 
} 

let organizations: Organization[] | number[], 
    orgs: string[]; 

if (isOrganizationList(organizations)) 
    orgs = organizations.map(org => org.id); 

Обратите внимание: вы можете написать свою собственную реализацию isOrganizationList с более надежным тестом.

+0

Похоже, мне придется прочитать эту главу еще несколько раз. – wolfhoundjesse

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