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

如何在不显式指定泛型时确定key所属的TypeScript类型

如何让TypeScript自动推断泛型类型并校验参数一致性

我希望在不显式指定泛型的情况下,让TypeScript自动判断给定key所属的类型。现有代码如下:

type TypeOne = {a:string, b:string}
type TypeTwo = {c:string, d:string}

function doSomething<T extends TypeOne | TypeTwo>(firstKey: keyof T, secondKey: keyof T) {
    console.log(firstKey, secondKey)
}

doSomething<TypeOne>('a','c')

doSomething('a','c')

显式指定泛型调用doSomething时,TypeScript会按预期报错;但我希望TypeScript能智能判断key所属的类型,让不绑定类型的调用也能仅对第二个参数'c'抛出警告。

我尝试了如下写法:

type KeysOfUnion<T> = T extends T ? keyof T : never;

function doSomething<T extends TypeOne | TypeTwo>(firstKey: KeysOfUnion<T>, secondKey: KeysOfUnion<T>) {
    console.log(firstKey, secondKey)
}

但这并无帮助,因为所有key会被合并为联合类型作为参数的可选值。

补充说明:我的联合类型来自如下可扩展的类型:

type AllOptions = {
    one: TypeOne,
    two: TypeTwo
}

function doSomething<T extends AllOptions[keyof AllOptions]>(firstKey: KeysOfUnion<T>, secondKey: KeysOfUnion<T>) {
    console.log(firstKey, secondKey)
}

内容的提问来源于stack exchange,提问作者Michiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:03