gpt4 book ai didi

typescript :只输入参数或函数的返回类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:51 25 4
gpt4 key购买 nike

我有几个接受不同参数的函数,但它们都返回一个具有相同签名的函数:

const createSum5 = () => (c: number) => c + 5;
const createMultiplyN = (n: number) => (c: number) => n * c;
const createWordsSum = (word: string) => (c: number) => word.length + c;

返回类型总是(c: number) => number。有没有一种方法可以在不键入参数的情况下为所有函数键入此返回值?这样我就可以在不失去类型安全的情况下将它们缩短为:

createSum5:/* Something here */= () => c => c + 5;


我试过这些,但是:

1.这个解决方案失去了类型安全:type NumericArg = (...args: any) => (c: number) => number;

2.我可以提前为每个函数写函数签名:

type Nfunction = (c: number) => number;
type createSum5Type = () => Nfunction;
...
const createSum5: createSum5Type = () => c => c + 5;

但是那会很乏味。我希望 Typescript 自动推断参数,就像我不指定类型时那样。

还有别的办法吗?是否可以做相反的事情(指定具有相同签名的函数,但让 Typescript 推断返回类型?)。


编辑#1:这是我谈论相反的例子:

const func1: /* Something here */ = num => '#'.repeat(5);
const func2: /* Something here */ = num => num * num;

func1 和 func2 具有相同的签名 (num: number) 但返回类型不同。我希望 Typescript 推断每次我调用 func1 时返回类型都是 string,但是对于 func2 返回类型是数字。


编辑#2:

我的用例不相关,但我还是会添加它。我正在使用 Thunks 开发 React-redux 应用程序。每个 thunk 总是返回一个带有签名的函数 (dispatch, getState) => void 但它们可能接受不同的参数。经过一些研究,这是我能找到的不太冗长的版本:

const onFetchUser = (userIds: number[]) : ThunkFunction = dispatch => { ... }

如果有一种方法允许 Typescript 推断参数但让我设置返回类型(这是我的问题),我可以像这样更容易阅读:

const onFetchUser:/* something here */= (userIds: number[]) => dispatch => {...}

最佳答案

不确定它是否是唯一的选择,但一个选择是使用一个辅助函数,它有一个通用参数,该参数将捕获传入函数的实际类型,但也会强制返回类型 ( c: number)=> number.

function fn<T extends (...a: any[]) => (c: number) => number>(o: T) {
return o;
}
const createSum5 = fn(() => c => c + 5)
const createMultiplyN = fn((n: number) => c => n * c);
const createWordsSum = fn((word: string) => c => word.length + c);

我不相信存在另一种选择, typescript 通常不允许对变量进行部分推理(或更具体地说是约束推理),这只能通过函数来​​完成。

关于 typescript :只输入参数或函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826881/

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