typescript - 是否可以在函数的参数类型中使用函数的返回类型?
问题描述
例如,当我尝试这样做时:
function chain<A, B extends (input: A, loop: (input: A) => C) => any, C extends ReturnType<B>> (input: A, handler: B): C {
const loop = (input: A): C => handler(input, loop);
return loop(input);
}
chain('test', async (value, loop): Promise<string> => {
const ready = await someExternalThing();
if (ready) {
return value;
} else {
return await loop(value + '!');
}
});
即使为处理函数定义了严格的返回类型,底部代码中循环函数的返回类型仍然显示为“任意”
有人知道解决这个问题的任何方法吗?
解决方案
据我了解,以下工作并做你想做的事:
function chain<A, C> (input: A, handler: (input: A, loop: (input: A) => C) => C): C {
const loop = (input: A): C => handler(input, loop);
return loop(input);
}
chain<string, Promise<string>>('test', async (value, loop) => {
const ready = await someExternalThing();
if (ready) {
return value;
} else {
return await loop(value + '!');
}
})
关键是在调用时指定泛型参数chain
。
推荐阅读
- ruby-on-rails - 使用 RSpec 自动增加主键
- azure-active-directory - 在多个租户 Azure AD 中为 Microsoft Autopilot 注册设备
- node.js - 在 mysql phpmyadmin 中找不到表
- java - JPQL中对象构造函数内的子查询
- r - 眼动数据R包扫视分析中的问题
- python - 无法在 Python 中使用递归调试列表的总和
- c++ - 如何在线程中关闭 QWebSocket?
- c# - int 列表将记录获取到某个值
- django - Django rest framework social oauth2 api url 和响应自定义
- scala - java.lang.NoClassDefFoundError: scala/runtime/LazyBoolean