TypeScript有typeof
和keyof
。我正在寻找一些可以让我得到可调用参数类型的东西作为元组。例如,
import subject, { ParamA, ParamB, Output } from '.'
interface TestCase {
input: (typeof subject).parameters // or perhaps `parametersof subject`
key: keyof Output
expectedValue: string
}
我知道我可以做input: [ParamA, ParamB]
并完成它,但是......你知道......
答案 0 :(得分:3)
不干净,没有。 TypeScript当前(从版本2.5开始)缺少type operators的类型,它可以让您从函数类型中干净地提取参数类型。有一个proposal可以让你在任意表达式上使用std::multi_set
,这将为你提供一种方法。现在,您可以这样做(仅适用于两个参数,必要时可以扩展到更多):
matchOpticalFlowNaive()
欺骗类型系统提取typeof
的参数类型并声明该类型的const params = (false as true) &&
(null! as <T, U>(f: (p1: T, p2: U, ...rest: any[]) => any) => [T, U])(subject);
interface TestCase {
input: typeof params
key: keyof Output
expectedValue: string
}
常量。在运行时,subject
只是params
这是好事,因为你实际上不能让函数在运行时返回它的参数类型。
它很丑陋(一个虚拟的常数乱码你的代码)但它有效。
希望有所帮助;祝你好运!