javascript - 使用 Typescript 反应钩子:期望一个赋值或函数调用,而是看到一个表达式
问题描述
我成为 React 开发人员已有一段时间了。在工作中,我们现在介绍了我相对较新的 Typescript。
我创建了一个使用 cookie 的钩子,但我返回的函数导致错误。
钩子(删除了一些公司的东西):
function useCookies(key: string) {
const [storedCookie, setStoredCookie] = useState(() => getCookieValue(key));
function setCookie(value: any, daysUntilExpiry?: number): any {
if (value) {
const valueToStore =
value instanceof Function ? value(storedCookie) : value;
setStoredCookie(valueToStore);
let cookieString = `${key}=${valueToStore}`;
if (daysUntilExpiry) {
const date = new Date();
date.setDate(date.getDate() + daysUntilExpiry);
cookieString = `${cookieString}; expires=${date}`;
}
document.cookie = cookieString;
}
}
return [storedCookie, setCookie];
}
const [loggedIn, setAuthState] = useCookies('logged_in');
setAuthState(true, 7);
setAuthState 函数调用给了我错误Expected an assignment or function call and instead saw an expression
。谁能指出我为什么?!
解决方案
useCookies 的返回类型被推断为一个任意长度的数组,并且可以包含设置 cookie 的字符串或函数。因此,当您从列表中取出第二项时,TS 认为这可能是字符串或函数。
要解决此问题,如果您使用的是 3.4+,当您从函数返回值时,只需在as const
返回时将其标记为:
return [cookie, setCookie] as const;
编辑:上面 Per Svensson 的建议也修复了它。
推荐阅读
- java - 当我们转换为 Map 时出现 Json 解析异常
- mysql - 如果我抛出错误,是否需要释放连接?
- qt - 从文件系统加载图像在 Qt 样式表中不起作用
- android - 有什么方法可以检测到哪些应用程序我可以/不能访问他们的“应用程序信息”屏幕?
- python - Numpy 连接占用太多内存。有没有更有效的方法?
- c# - 自定义控件:在自定义控件中添加自定义按钮点击逻辑
- python-3.x - VS 代码 pylint 错误和格式不起作用
- javascript - 静音和取消静音按钮
- windows - 如何为指向特定 firebird 数据库存档的应用程序创建快捷方式?
- django-rest-framework - ListCreateAPIView Django 休息框架方法 \"POST\" 不允许