如何在外部获取TypeScript函数参数的类型?
获取TypeScript泛型函数的参数类型
你可以通过TypeScript内置的Parameters工具类型提取函数参数类型,结合泛型函数的类型指定来实现需求。你的写法错误在于直接对函数类型使用调用语法,这在类型层面不适用。
正确写法
import { Example, Animal, Mammal } from './not-relevant'; // 直接提取指定泛型参数后的参数类型 type AnimalParam = Parameters<Example['edit']<Animal>>[0]; // AnimalParam 类型即为 Animal | Mammal<Animal>
分步解释
Example['edit']获取到接口中edit方法的泛型函数类型:<T extends Animal>(animal: T | Mammal<T>) => void- 给泛型函数指定具体的泛型参数
<Animal>,得到实例化后的函数类型:(animal: Animal | Mammal<Animal>) => void Parameters<FnType>会提取函数的参数列表为元组类型,这里得到[Animal | Mammal<Animal>]- 取元组的第0个索引,就是目标参数的类型
通用化写法(如需复用泛型)
如果需要针对不同的T类型复用参数类型提取逻辑,可以定义一个泛型类型:
type EditParam<T extends Animal> = Parameters<Example['edit']<T>>[0]; // 使用示例 type DogParam = EditParam<Dog>; // 类型为 Dog | Mammal<Dog>
内容的提问来源于stack exchange,提问作者GoncaloNGT
相关产品推荐
相关产品推荐

