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

如何缩小as const声明对象的Object.keys返回值类型范围

缩小Object.keys返回值的类型到对象键的字面量类型

针对你定义的LOGIC_CATEGORIES常量,有两种安全的方式缩小Object.keys返回值的类型,同时保留类型安全性:

方法一:直接使用类型断言

将Object.keys的结果断言为对象键的数组类型,适用于单次使用的场景:

const LOGIC_CATEGORIES = {
  core: "Core",
  transformer: "Transformers",
  logic: "Logical Operators",
  requests: "Requests",
} as const;

(Object.keys(LOGIC_CATEGORIES) as Array<keyof typeof LOGIC_CATEGORIES>).map((category) => {
  // 此时category的类型为 "core" | "transformer" | "logic" | "requests"
  console.log(LOGIC_CATEGORIES[category]);
});

方法二:封装类型安全的工具函数

如果需要多次使用,封装一个通用函数可以避免重复写断言,同时保证类型一致性:

const LOGIC_CATEGORIES = {
  core: "Core",
  transformer: "Transformers",
  logic: "Logical Operators",
  requests: "Requests",
} as const;

// 通用工具函数,返回对象键的字面量类型数组
const getTypedKeys = <T extends object>(obj: T): Array<keyof T> => {
  return Object.keys(obj) as Array<keyof T>;
};

// 使用工具函数
getTypedKeys(LOGIC_CATEGORIES).map((category) => {
  console.log(LOGIC_CATEGORIES[category]);
});

补充说明

TypeScript默认将Object.keys的返回值设为string[],是因为无法在编译期确保运行时对象没有额外的可枚举属性。但对于你用as const定义的纯字面量对象,上述两种方法都是安全的,不会丢失类型安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:15:05