如何在TypeScript中让类型继承另一类型并共享相同键?
TypeScript 类型关联问题:让SubCollections与Collections共享键约束
现有如下TypeScript类型:
export type Collections = { users: User business: Business permissions: Permissions cards: Card } // 注:Collections[keyof Collections] 是自定义对象类型,与当前问题无关
我想创建一个**继承自Record<keyof Collections, unknown>**的类型。我知道TypeScript的satisfies运算符,但它只适用于const声明,没法用于类型继承。
我期望的SubCollections结构如下:
export type SubCollections = { cards: [CardLog, CardActions] users: [UserLog] }
这种写法本身可行,但在使用泛型函数时会遇到问题:
const subcollection = <K extends keyof Collections, S extends SubCollections[K]>( collection: K, sub: S ) => { /* ... */ }
会抛出类型错误:
Type
Kcannot be used index typeSubCollections
我理解报错原因,也可以通过手动类型收窄解决:
type SharedKey<K extends keyof Collections> = K extends keyof SubCollections ? K : never export const subcollection = < K extends keyof Collections, S extends SharedKey<K> >(collection: K, subcol: S) => { /* ... */ } // 这样可以正常工作!
但这种手动收窄的方式在每个场景都要写,太繁琐。有没有办法让TypeScript自动识别两个类型共享相同的键?比如类似以下(无效语法)的写法:
// 类似这种思路(显然语法无效) export type SubCollections extends Record<keyof Collections, unknown[]> = { cards: [CardLog, CardActions] users: [UserLog] }
内容的提问来源于stack exchange,提问作者Samuel Hulla
相关产品推荐
相关产品推荐

