You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Type Guard检查字符串是否为TranslationLanguage类型?

问题

现有如下TypeScript代码:

const languages = ["en", "de", "ar"] as const;

export type TranslationLanguage = (typeof languages)[number];

此时TranslationLanguage的类型为"en" | "de" | "ar",运行正常。现需实现一个类型守卫函数,判断传入的字符串是否属于TranslationLanguage类型,返回布尔值。用户给出的伪代码如下:

function checkAvailableLanguage(
  language: string
): language is TranslationLanguage {
   if (language typeof TranslationLanguage){
    return true
   else{
    return false
   }
}

请问该如何正确实现这个函数?

实现方案

TypeScript的类型信息在编译阶段会被擦除,运行时无法直接通过类型本身做判断,所以我们要借助原始的languages数组来完成运行时校验。

正确的实现代码如下:

const languages = ["en", "de", "ar"] as const;

export type TranslationLanguage = (typeof languages)[number];

function checkAvailableLanguage(language: string): language is TranslationLanguage {
  // 利用数组includes方法判断字符串是否在允许的语言列表内
  return (languages as readonly string[]).includes(language);
}

补充说明

  • 因为languages被const断言为只读的字面量数组,直接调用includes会出现类型不兼容的问题,所以需要先将其断言为readonly string[],让TypeScript允许传入string类型的参数进行判断。
  • 当该函数返回true时,TypeScript的类型系统会自动把传入的language变量类型收窄为TranslationLanguage,后续代码里可以安全地将其当作这个类型使用。

内容的提问来源于stack exchange,提问作者Dmytro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:15