gpt4 book ai didi

typescript - 从 Flow 迁移到 TypeScript : $Call 等效于 TS?

转载 作者:行者123 更新时间:2023-12-05 06:20:10 24 4
gpt4 key购买 nike

流量有得心应手 $Call<F, T...> utility type可以获取调用类型 F 的函数的返回类型,(可选)第一个参数为类型 T,第二个参数等等。所以我们可以这样做:

type First = <T>(Array<T>) => T | void;
type ShouldBeOptionalString = $Call<First, Array<string>>; // ShouldBeOptionalString is string | void

TypeScript 可以实现等效的功能吗?我知道 ReturnType<T> utility type由 TypeScript 提供,但它无法根据参数类型计算返回类型:

type First = <T>(arg0: Array<T>) => T | void;
type WhatWillThisBe = ReturnType<First>; // WhatWillThisBe will be unknown

我尝试推出我自己的 ReturnType 版本,它试图用给定的参数推断返回类型,但没有成功:

type CallWithArgsReturnType<T extends (...args: any) => any, A extends Array<any>> = T extends ((...args: A) => infer R) ? R : never;
type ShouldBeOptionalString = CallWithArgsReturnType<First, [Array<string>]>; // ShouldBeOptionalString will be unknown

最佳答案

我相信要实现这样的目标,您必须将类型设为泛型,我想每个参数都有一个单独的泛型:

type First<T = any> = (arg0: T[]) => T | void;

type WhatWillThisBe = ReturnType<First<string>>; // string | void

如果您还希望该函数是通用的,据我所知,您可以这样做:

type First<T = any> = <U extends T>(arg0: Array<U>) => U | void;

type WhatWillThisBe = ReturnType<First<string>>; // string | void

关于typescript - 从 Flow 迁移到 TypeScript : $Call<F, T...> 等效于 TS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60616924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com