جافاسكريبت - تحويل تعداد TypeScript إلى كائن محدد


لدي تعداد TypeScript التالي:

export declare enum SupportedLanguages {
    en,
    fr
}

إذا قمت باستيراده في تطبيق React الخاص بي وconsole.log له، سأحصل على الكائن التالي معاد:

{
  en: "en", 
  fr: "fr"
}

كيف يمكنني التلاعب به، بحيث أحصل على الكائن التالي معاد؟

{
  en: "",
  fr: ""
}

لقد جربته باستخدام const Lang=Object.keys(SupportedLanguages) وأيضًا باستخدام .map() ولكن لم أحصل على الكائن المتوقع.

الإجابة رقم 1

يمكنك الحصول على المفاتيح، ومطابقتها مع زوج مرتب [key, '']، وإرجاعها مرة أخرى إلى كائن باستخدام Object.fromEntries():

const supportedLanguages = {
  en: "en", 
  fr: "fr"
};

const result = Object.fromEntries(
  Object.keys(supportedLanguages)
    .map(k => [k, ''])
);

console.log(result);

إذا تلقيت خطأً مثل هذا:

TS2550: الخاصية 'fromEntries' غير موجودة في نوع 'ObjectConstructor'. هل تحتاج إلى تغيير مكتبتك المستهدفة؟ جرب تغيير خيار المترجم lib إلى 'es2019' أو أحدث.

أضف es2019 إلى compilerOptions.lib في tsconfig.json لمشروعك:

{
  "compilerOptions": {
    "lib": [
      "es2019"
    ]
  }
}

الإجابة رقم 2

هل تبحث فقط عن الحصول على كائن جديد بجميع البيانات كسلاسل فارغة؟

var supportedLanguages = {
  en: "en", 
  fr: "fr"
};

var result = Object.keys(supportedLanguages)
    .reduce((accum, key) => 
        Object.assign(accum, { [key]: "" })
    , {});

console.log(result); // { "en": "", "fr": "" }