如何基于参数创建仅含单个指定属性的TypeScript类型?
实现动态属性名的泛型对象类型
要实现你需要的动态属性名泛型类型,直接用TypeScript的计算属性名结合泛型约束即可,具体写法如下:
首先定义基础的AuthPayload类型(假设你已有定义):
type AuthPayload = { // 这里是你的AuthPayload具体结构,比如: token: string; userId: number; };
然后定义泛型Response类型:
type Response<T extends string | number | symbol> = { [K in T]: AuthPayload; };
或者用TypeScript内置的Record工具类型简化写法,效果完全一致:
type Response<T extends string | number | symbol> = Record<T, AuthPayload>;
使用示例
type RegisterResponse = Response<"register">; // 实际类型等价于:{ register: AuthPayload } type LoginResponse = Response<"login">; // 实际类型等价于:{ login: AuthPayload }
补充说明
你之前尝试的{ T: AuthPayload }写法错误在于,它是把属性名固定成了字符串"T",而非将泛型参数T作为动态属性名。而[K in T]这种计算属性语法,会把泛型参数T指定的键名映射到对象类型中,正好满足你的需求。
内容的提问来源于stack exchange,提问作者Ammar Ahmed
相关产品推荐
相关产品推荐

