TypeScript的状态机类型定义
我正在定义一个系统的可能状态及它们之间的转换。我想用我想到的最简洁形式来实现这件事,作为一个映射,表示所有可能的状态(键)以及它们能够转换到的状态(值)。
我找不到在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。