2016-10-01 52 views
1

我一直喜歡打字稿中的工會類型,但我剛剛打了我的第一個障礙。從打字稿中的一種工會類型到另一種工作文字的映射

這是有問題的成員:

organizations: Organization[] | number[]; 

這就是我想要做的事:

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

換句話說,藉此收集<Organization[]>並將其映射到其ID這樣我就可以擁有<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

相關問題