Typescript 函数的句柄返回类型

Typescript 函数的句柄返回类型,typescript,Typescript,我是打字新手,面临一个问题: 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 = urlPara

我是打字新手,面临一个问题:

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”。我在这里得到的错误是:类型'string'不能赋值给类型'en'|“ar'”。我应该如何解决这个问题?

以下是解决问题的方法:

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;
};

我希望函数的返回类型具体为“en”或“ar”。不string@MauriceNino那么我应该做什么更改来确保我只返回'en'或'ar'您返回的是一个基类型为string的特定枚举值。因此,让您的enum类如我所说,代码已经在处理null情况,如果为null,它将返回'ar'。如何让typescript知道this@MauriceNino因为“en”和“ar”是字符串。。。否。ts中有类型文字。对于ts,“en”不是字符串而是自定义类型。是的,sting-literal和sting对于typescript不是同一类型。如果(语言=='en'| |语言=='ar')。。。从现在起,ts编译器可以推断类型文字。。。对于ts,“ar”不是字符串,而是类型“ar”。这是一个很好的解决方案