如何在不显式指定泛型时确定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
相关产品推荐
相关产品推荐

