首页 > 解决方案 > 处理函数的返回类型

问题描述

我是打字稿的新手并面临一个问题:

type TLang = 'en' | 'ar'

export const getIntlLang = (): 'en' | 'ar' => {
  const validLangs = ['en', 'ar'];
  const urlParams = new URLSearchParams(window.location.search);
  let userLang: TLang = 'ar';
  const customLang = urlParams.get('language') || '';
  if (customLang && validLangs.includes(customLang)) {
    userLang = customLang; // **Type 'string' is not assignable to type** '"en" | "ar"'
  } else {
    const language: TLang =
      window.localStorage && window.localStorage.getItem('language');
    if (language && validLangs.indexOf(language) >= 0) {
      userLang = language;
    }
  }
  updateLang(userLang);
  return userLang;
};

我希望函数的返回类型具体为“en”或“ar”。我在这里收到错误:类型'字符串'不可分配给类型'“en” | “阿尔”。我应该如何解决这个问题?

标签: typescript

解决方案


这是为我解决问题的方法:

export const getIntlLang = (): TLang => {
  const urlParams = new URLSearchParams(window.location.search);
  let userLang: TLang = 'ar';
  const customLang = urlParams.get(LANGUAGE_KEY);
  if (customLang === 'ar' || customLang === 'en') {
    userLang = customLang;
  } else {
  const language =
    window.localStorage && window.localStorage.getItem(LANGUAGE_KEY);
    if (language === 'en' || language === 'ar') {
      userLang = language;
    }
  }
  updateLang(userLang);
  return userLang;
};

推荐阅读