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

如何让TypeScript为不同类型的Feature Flag精准推断值类型?

为功能标志实现精确的TypeScript类型定义

你之前用Record的方式会让所有功能标志的值类型变成boolean | number的联合类型,导致TypeScript无法区分每个标志的具体类型。可以用以下两种方式解决:

方法一:手动定义精确的接口

直接通过interface明确每个功能标志的键和对应类型,这是最直观的方式:

// 可选:如果需要单独提取标志名称类型
type FeatureFlagName = 'foo' | 'bar' | 'another';

// 精确定义每个标志的类型
interface FeatureFlags {
  foo: boolean;
  bar: boolean;
  another: number;
}

const featureFlagDefaults: FeatureFlags = {
  foo: false,
  bar: false,
  another: 10,
};

// 此时类型推断正确:
featureFlagDefaults.foo; // 类型为 boolean
featureFlagDefaults.another; // 类型为 number

方法二:利用const断言自动推断类型

如果不想手动维护接口,可以用as const断言让TypeScript自动推断最精确的键值类型,同时从默认值中提取所需的类型:

// 定义默认值并使用const断言锁定类型
const featureFlagDefaults = {
  foo: false,
  bar: false,
  another: 10,
} as const;

// 从默认值提取标志名称类型
type FeatureFlagName = keyof typeof featureFlagDefaults;
// 提取完整的功能标志类型
type FeatureFlags = typeof featureFlagDefaults;

// 类型推断同样准确:
featureFlagDefaults.foo; // boolean
featureFlagDefaults.another; // number

为什么原来的方式不行?

Record<FeatureFlagName, boolean | number>会给所有键统一赋予boolean | number的联合类型,TypeScript无法区分每个键对应的具体类型,所以会丢失精确的类型信息。而上面两种方式都能给每个键绑定唯一的类型,确保引用时的类型推断准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:11