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

如何用TypeScript定义自约束状态机类型(自动推断状态)

解决TypeScript状态机的类型约束问题

你可以通过泛型工具类型结合satisfies关键字实现需求,让TypeScript自动从对象键推断状态类型,同时严格约束状态转换的目标值只能是对象自身的键:

type StateMachine<T> = { [K in keyof T]: Array<keyof T> };

const story = {
  todo: ["inProgress", "done"],
  inProgress: ["todo", "done"],
  done: [],
} satisfies StateMachine<typeof story>;

核心说明

  • StateMachine<T>是泛型类型,通过[K in keyof T]遍历对象的所有键,将每个键对应的值约束为对象自身键的数组(Array<keyof T>)。
  • 使用satisfies StateMachine<typeof story>约束对象后,TypeScript会自动从story的键推断出状态联合类型("todo" | "inProgress" | "done"),无需单独定义状态类型。
  • 编写状态转换数组时,会获得精确的类型提示,且输入非法状态值(比如["invalid"])会直接触发TypeScript报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:02:33