在 TypeScript 中,可使用 Record<string, boolean> 类型精确描述“键为任意字符串、值均为布尔值”的动态对象,比索引签名 { [key: string]: boolean } 更简洁、语义更明确,且具备更好的类型安全性和可维护性。
在 typescript 中,可使用 `record
当你需要为类似 checkboxesState 这类运行时动态生成的对象定义类型(例如:用户勾选后产生 "option1": true, "option2": false 等键值对),核心诉求是——不限定具体键名,但严格约束所有键必须为字符串、所有值必须为布尔值。
此时,推荐使用内置泛型工具类型 Record<Keys, Type>:
interface FieldProps {
checkboxesState: Record<string, boolean>;
}✅ Record<string, boolean> 等价于 { [k: string]: boolean },但优势显著:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 语义清晰:直观看懂“记录(键值对)映射”,而非底层索引签名语法;
- 类型推导友好:配合 Object.keys()、Object.entries() 等方法时,TypeScript 能更准确推断键的类型(如 keyof T 的联合字面量类型);
-
扩展性强:若未来需限定键为特定字符串集合(如仅允许 "option1" | "option2" | "option3"),可无缝升级为:
type ValidOption = 'option1' | 'option2' | 'option3'; checkboxesState: Record<ValidOption, boolean>;
⚠️ 注意事项:
- 避免使用 any 或 object,会丧失类型检查能力;
- 若对象可能包含非布尔值(如 undefined 表示未初始化),应显式声明联合类型:Record<string, boolean | undefined>;
- Record 不允许 null 作为键(符合 JavaScript 实际行为),且键始终被视作 string(数字键会自动转为字符串,如 obj[1] 等价于 obj["1"])。
? 小结:对于动态键名、统一值类型的对象,优先选用 Record<K, V> —— 它是 TypeScript 类型系统中表达“键值映射契约”的标准、健壮且可读的方式。

















