useAsync中Run函数参数中Promise的类型问题

来源:7-2 用高级 Hook-useAsync统一处理Loading和Error状态

Bokk

2021-01-28

Nolan你好,

我在尝试自己实现的简化版useAync中遇到一个ts的类型问题,请求解答

我的useAsync实现如下

export const useAsync = () => {
  const [value, setValue] = useState(null);
	...
  const run = (promises: Promise<typeof value>) => {
	...
  };
...
};

在调用run函数时候,传入Promise<String> 类型,这样就会报错

Argument of type ‘Promise<string>’ is not assignable to parameter of type ‘Promise<null>’.

图片描述

这是因为run中Promise是 <typeof value> 的类型,而value的初始值就是null导致的

请问有没有别的解法方法既可以限制Promise的类型跟value类型一致,又不是null类型呢?

写回答

1回答

Nolan

2021-01-28

实现这种效果只能用泛型,因为没法在定义useAsync的时候知道value到底是什么类型

0
3
Bokk
回复
Nolan
好的 谢谢老师 不过如果useAsync 没有传参的话好像是不能成 export const useAsync = () => {},所以有点疑惑
2021-02-02
共3条回复

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程