首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当没有递归时,Luau错误“递归类型使用不同的参数”

当没有递归时,Luau错误“递归类型使用不同的参数”
EN

Stack Overflow用户
提问于 2022-10-21 19:01:24
回答 1查看 39关注 0票数 0

使用Luau 0.550,在下面的代码中获得以下错误:TypeError: Recursive type being used with different parameters。不存在递归,而删除setmetatable()解决了问题(但我需要在集成示例中这样做)。

代码语言:javascript
复制
--!strict
local __: Observable<any> -- recursive type error on this line, but there's no type recursion!

-- false positive happens on any function call, is resolved if I delete the setmetatable function call
local _ = setmetatable({}, {})

export type Observable<K> = any
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-24 20:03:14

这是(至少) 0.550和之前的一个bug,其中使用泛型类型和泛型类型声明之间的任何函数调用都会触发这一错误的正警告。目前的解决办法是重新排序类型声明和使用。

代码语言:javascript
复制
--!strict
export type Observable<K> = any -- manually hoisting this line fixes the issue
local __: Observable<any> 

local _ = setmetatable({}, {})

如果您需要对这些事情进行不同的排序--例如,如果您的泛型类型声明在其赋值时使用了typeof(),因此需要在使用后声明--那么您现在只是运气不佳。您的最佳选择是提升声明并使用不太具体的类型形状(但如果可能的话仍然避免any ):

代码语言:javascript
复制
--!strict
type Object = { [string]: unknown }
export type Observable<K> = Object -- loses most safety, workaround for Luau bug
local __: Observable<any> 

local _ = someFunctionCall()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74158144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档