You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 K cannot be used index type SubCollections

我理解报错原因,也可以通过手动类型收窄解决:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:05:20