私はTypeScriptを初めて使っていますが、まだ物事のハングアップを取得しようとしています。ダックタイプのユニオンタイプをTypeScriptインターフェイスに処理する方法は?
タイムラインを構成する一連のイベントがあります。
const timeline = [{
type: 'payment',
amount: '12.23 USD',
when: '<iso timestamp>'
},{
type: 'payment',
amount: '12.23 USD',
when: '<iso timestamp>'
},{
type: 'refunded',
amount: '2.00 USD',
when: '<iso timestamp>'
},{
type: 'payment',
amount: '12.23 USD',
when: '<iso timestamp>'
},{
type: 'delinquent',
when: '<iso timestamp>'
}]
だから私が去っと組合型としてIEvent
を定義しました:
interface IPaymentEvent {
amount: string,
when: string
}
interface IRefundedEvent {
amount: string,
when: string
}
interface IDelinquentEvent {
when: string
}
type IEvent = IPaymentEvent | IRefundedEvent | IDelinquentEvent
問題は、私は私の中で、このタイプの情報を使用する方法が混乱しているということである彼らは、このようなものを見てコード。そのタイムラインを、私が今定義した実際のタイプに変換するにはどうすればよいですか?そして、配列を反復処理するときに、どのように私はunion型を解体するのですか?これで
私の試みは、次のようになります。
class PaymentEvent implements IPaymentEvent {}
class RefundedEvent implements IRefundedEvent {}
class DelinquentEvent implements IDelinquentEvent {}
const duckTypeMap = {
payment: PaymentEvent,
refunded: RefundedEvent,
delinquent: DelinquentEvent
}
const typedTimeline = timeline.map(x => {
return duckTypeMap[x.type](x)
})
console.log(typedTimeline)
私はここに一般的な方法が存在しなければならないという感覚を得ます。私はまた、これを行う2つの方法、(1)es6クラス、(2)es6クラスなしで興味があります。後者の場合、型システムは、JSONをどのようにしてアヒルを入力するかを教えれば助けてくれます。
はのように、タイプとして文字列を使用して考えてみましょう:あなたは
instanceof
演算子を使用することができます「と入力」配列の反復処理時にアイテムの種類を決定するために'インターフェイスIRefundedEvent {type:" refunded "; } '。 –