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

TypeScript中如何在类型检查前校验动态生成的翻译键是否合法

校验翻译键有效性的实现方案

以下两种方案可以满足你的需求,你可以根据使用场景选择:

方案1:TypeScript 静态类型校验(编译阶段生效,无运行时开销)

该方案可以在TS类型检查阶段就拦截非法参数,不需要等到代码运行就能发现错误,适合所有partialKey为代码内写死的场景。
要求TS版本 >= 4.1(支持模板字面量类型),实现代码如下:

// 加as const固定对象键的字面量类型,避免被自动收窄为string
const translations = {
    msg_hello: 'Hello',
    msg_bye: 'Bye'
} as const;

// 工具类型:移除字符串前缀
type RemovePrefix<T extends string, Prefix extends string> = 
    T extends `${Prefix}${infer Suffix}` ? Suffix : never;

// 提取所有合法的partialKey联合类型
type ValidPartialKey = RemovePrefix<keyof typeof translations, 'msg_'>;

// 限制入参只能是合法的partialKey
const generateTranslation = (partialKey: ValidPartialKey): keyof typeof translations => {
    return `msg_${partialKey}`;
}

校验效果:

generateTranslation('hello'); // 语法正常,无报错
generateTranslation('no'); // TS直接抛出类型错误:类型"no"的参数不能赋给类型"hello" | "bye"的参数

方案2:运行时校验(适配动态传参场景)

如果你的partialKey是从接口、用户输入等动态来源获取,无法在编译阶段确定值,可以添加运行时校验做双重保障,避免非法键进入业务逻辑:

const translations = {
    msg_hello: 'Hello',
    msg_bye: 'Bye'
} as const;

const generateTranslation = (partialKey: string): keyof typeof translations => {
    const generatedKey = `msg_${partialKey}` as keyof typeof translations;
    // 校验生成的键是否存在于翻译对象中
    if (generatedKey in translations) {
        return generatedKey;
    }
    // 非法键处理逻辑,可根据需求调整:抛错/返回默认键/打印警告
    throw new Error(`非法翻译键:${generatedKey}`);
}

场景选择建议

  • 纯静态传参场景:只用方案1即可,零运行时成本,编译阶段就能发现所有错误
  • 存在动态传参场景:建议两种方案结合使用,静态层校验写死参数,运行时层校验动态参数,覆盖所有边界情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:04