簡體   English   中英

Typescript 嵌套動態的返回類型 object

[英]Typescript return type for nested dynamic object

假設有一個 function 返回以下 object。

 private static prepareExperienceFilter(experienceLevel: ExperienceFilterType): any {
    const aggregationObject = {
        'lt_1': { $lt: 1 },
        'between_1_3': { $gt: 0, $lt: 3 },
        'between_3_5': { $gt: 2, $lte: 5 },
        'gt_5': { $gt: 5 }
    };

    const condition = aggregationObject[experienceLevel];

    return { 'yearsOfExperience.min': condition };
}

我們如何為這樣的 object 定義類型或接口?

我試過聯合類型,但沒有成功。

謝謝你的幫助。

通過將 static object 移到您的方法之外,您可以在函數的返回類型中引用它的類型。 這將允許您使用泛型類型參數來約束 function 參數(同時還為使用它的開發人員提供 IntelliSense 推理)並索引返回類型:

TS游樂場

const aggregationObject = {
  'lt_1': { $lt: 1 },
  'between_1_3': { $gt: 0, $lt: 3 },
  'between_3_5': { $gt: 2, $lte: 5 },
  'gt_5': { $gt: 5 },
};

type ExperienceFilterType = keyof typeof aggregationObject;

function prepareExperienceFilter <T extends ExperienceFilterType>(experienceLevel: T): {
  'yearsOfExperience.min': typeof aggregationObject[T];
} {
  const condition = aggregationObject[experienceLevel];
  return { 'yearsOfExperience.min': condition };
}

const result_lt_1 = prepareExperienceFilter('lt_1'); // { 'yearsOfExperience.min': { $lt: number; }; }

const result_gt_5 = prepareExperienceFilter('gt_5'); // { 'yearsOfExperience.min': { $gt: number; }; }

const result_invalid = prepareExperienceFilter('another_key'); /*
                                               ~~~~~~~~~~~~~
Argument of type '"another_key"' is not assignable to parameter of type '"lt_1" | "between_1_3" | "between_3_5" | "gt_5"'.(2345) */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM