如何为`KEY extends keyof Setting`创建类型别名?
简化泛型约束
KEY extends keyof Setting的写法 当然可以简化这类重复的泛型约束写法,你只需要把keyof Setting单独抽成一个类型别名,之后在泛型参数里用这个别名作为约束即可,不用像伪代码那样试图把整个泛型约束逻辑塞进别名里。
修改后的代码示例:
type Setting = { name: string, age: number, isVerified: boolean, } // 定义Setting的键类型别名 type SettingKey = keyof Setting; // 简化SettingObject的泛型约束 type SettingObject<KEY extends SettingKey> = { [P in KEY]: Setting[P] } // 各个函数的泛型约束同步简化 async function setValue<KEY extends SettingKey>(key: KEY, value: Setting[KEY]): Promise<void> { /* ... */ } async function setValueArray<KEY extends SettingKey>(values: SettingObject<KEY>): Promise<void> { /* ... */ } async function getValue<KEY extends SettingKey>(key: KEY): Promise<Setting[KEY]> { /* ... */ } async function getValueArray<KEY extends SettingKey>(keys: KEY[]): Promise<SettingObject<KEY>> { /* ... */ }
这样修改后,所有原本写KEY extends keyof Setting的地方都能替换成KEY extends SettingKey,既保留了原本的类型校验能力,又让代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Viewed
相关产品推荐
相关产品推荐

