2016-10-01 103 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

関連する問題