簡體   English   中英

有沒有辦法在 TypeScript 定義中動態生成成員?

[英]Is there a way to dynamically generate members in a TypeScript definition?

我不認為這個問題的標題很好,但我很難想出更好的東西,所以現在就可以了。

我也相當確定我想要的東西不被支持,但我很想被證明是錯誤的!

我有一個正在調用的 API,它根據查詢改變返回的對象中的成員名稱。

例如

GetInfo(languages?:string[]);
GetInfo() => { name: "Cologne" };
GetInfo(["en", "de"]) => { name: "Cologne", name_en: "Cologne", name_de: "Köln" };

有沒有辦法創建一個定義來“生成” name_{language} 成員?

不支持以這種方式操作屬性名稱(即將一個字符串連接到另一個字符串並使其成為類型檢查屬性)。

您能做的最好的事情不僅僅是返回一個屬性與語言名稱同名的對象:

function GetInfo<T extends string>(langs: T[]): Record<T | 'default', string>{
  return null as any;
}
let values = GetInfo(["en", "de"]) // values is  { en: string; de: string; default: string  }
values.default
values.de
values.en

GitHub 上有一個問題建議添加對字符串文字操作的支持,但目前在路線圖上還沒有

暫無
暫無

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

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