区分オブジェクト

 type Yen = {
   amount: number;
   currency: string;
 };
 
 type Fee = {
   yen: Yen;
   label: string;
 };
 
 type AdultFee = Fee;
 type ChildFee = Fee;
 
 enum FeeType {
   adult = 'adult',
   child = 'child',
 }
 
 const FeeTypeMapUtil = {
   create: function (): Map<string, Fee> {
     const adultFee: AdultFee = {
       yen: { amount: 1000, currency: 'JPY' },
       label: 'Adult',
     };
 
     const childFee: ChildFee = {
       yen: { amount: 500, currency: 'JPY' },
       label: 'Child',
     };
 
     return new Map<string, Fee>([
       [FeeType.adult, adultFee],
       [FeeType.child, childFee],
     ]);
   }
 }
 
 const feeTypeMap = FeeTypeMapUtil.create();
 
 const FeeTypeUtil = {
   fee: (feeType: FeeType): Fee | undefined => feeTypeMap.get(feeType),
 };
 
 function feeYenFor(feeTypeName: string): Yen {
   const fee = FeeTypeUtil.fee(feeTypeName as FeeType);
   if (!fee) {
     throw new Error(`Invalid fee type: ${feeTypeName}`);
   }
   return fee.yen;
 }
 
 console.log(feeYenFor('adult'));
 console.log(feeYenFor('adult1'));

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2023-05-17 (水) 08:46:19