2017-11-19 7 views
4

その種類の一般的な性質と種類を取得する方法を2種類Typescript 2種類の共通プロパティを持つ型を作成する方法は?

interface T1 { 
    x: number 
    y: number 
} 

interface T2 { 
    y: number 
    z: number 
} 

がありますか?

type C = { 
    [P in keyof A & keyof B]: A[P] | B[P] 
} 

これは、各キーはABで存在するであろう新しいタイプを定義しています。

type Common = Something<T1, T2> // { y: number } 

答えて

4

あなたはこの表記を使用することができます。

ABの値の型が異なる場合は、このキーに関連付けられた値のそれぞれは、ユニオンタイプA[P] | B[P]になります。

+0

うわー、それは働きます! =)私が "in"を理解しているので、オペレータは 'x'や 'z'のような入力をスキップしますか?コンパイラに共通プロパティ型の等価性を確認させる方法はありますか?例えば、yは数字でなければなりません –

+1

'x 'をスキップし、' z'は 'keyof A'と' keyof B'の共通部分です。 * in *演算子は、この交差点に 'C 'のキーがあることを伝えるだけです。 – kube

+0

一般的な型だけを交差させる方法が見つかりませんでしたが、多分方法があります。 – kube

0

@kube's answerに基づいて、再利用可能なタイプを作成するためにジェネリック医薬品を使用することができます。

type Common<A, B> = { 
    [P in keyof A & keyof B]: A[P] | B[P]; 
} 

これは、あなたがその場で交差点を作成することができます:

const c: Common<T1, T2> = { y: 123 }; 
関連する問題