说我在打字稿中有一个函数类型
results <- regmatches(x, regexec(regex, x, perl=TRUE))
unlist(lapply(results, function(x) paste(x[-1], collapse="")))
## => [1] "reduced" "" "reduced" ""
有没有办法在TypeScript中映射函数类型?我可以做类似的事情
interface ParseFn {
(param: string): number;
}
?
答案 0 :(得分:1)
Mapped types在TypeScript中完全忽略了调用并构造了签名,因此它们不会做您想要的事情。相反,您可以使用TypeScript 2.8中引入的type inference in conditional types。假设您要获取一个函数类型T
并返回一个具有相同参数但返回类型包含在Promise<>
中的新函数类型,您可以这样做:
type Async<T extends (...args: any) => any> =
T extends (...args: infer A) => infer R ? (...args: A) => Promise<R> : never;
type AsyncParseFn = Async<ParseFn>;
// type AsyncParseFn = (param: string) => Promise<number>
还有一些预定义的实用程序类型,称为Parameters<T>
和ReturnType<T>
,它们使用这种条件类型来获取参数元组和函数类型的返回类型。如果愿意,可以改用这些
type Async2<T extends (...args: any) => any> =
(...args: Parameters<T>) => Promise<ReturnType<T>>;
type Async2ParseFn = Async<ParseFn>;
// type Async2ParseFn = (param: string) => Promise<number>
无论哪种方法都可以。好吧,希望能有所帮助;祝你好运!