TypeScript的状态机类型定义

前端开发 2026-07-09

我正在定义一个系统的可能状态及它们之间的转换。我想用我想到的最简洁形式来实现这件事,作为一个映射,表示所有可能的状态(键)以及它们能够转换到的状态(值)。

我找不到在TypeScript中表达这个的办法。在值上,我希望被约束为对象自身的键,因此也能对可能的值提供类型提示。我希望可能的状态能够从对象的键中推断出来,而不是把它们作为一个独立的类型注入。

// This is the type I want to narrow further
type StateMachine = Record<string, string[]>;

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

解决方案

并非完全如此简单,但这会起作用:

type AllKeysArrayRecord<T extends PropertyKey> = {
  [P in T]: T[]
};

缺点是,在声明状态机时需要把所有键定义为一个联合类型,这可能不是你想要的。问题在于TypeScript不知道在对象初始化时哪些键会出现,因此在定义类型时就无法推断出键。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章