如何用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
相关产品推荐
相关产品推荐

