使用Luau 0.550,在下面的代码中获得以下错误:TypeError: Recursive type being used with different parameters。不存在递归,而删除setmetatable()解决了问题(但我需要在集成示例中这样做)。
--!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发布于 2022-10-24 20:03:14
这是(至少) 0.550和之前的一个bug,其中使用泛型类型和泛型类型声明之间的任何函数调用都会触发这一错误的正警告。目前的解决办法是重新排序类型声明和使用。
--!strict
export type Observable<K> = any -- manually hoisting this line fixes the issue
local __: Observable<any>
local _ = setmetatable({}, {})如果您需要对这些事情进行不同的排序--例如,如果您的泛型类型声明在其赋值时使用了typeof(),因此需要在使用后声明--那么您现在只是运气不佳。您的最佳选择是提升声明并使用不太具体的类型形状(但如果可能的话仍然避免any ):
--!strict
type Object = { [string]: unknown }
export type Observable<K> = Object -- loses most safety, workaround for Luau bug
local __: Observable<any>
local _ = someFunctionCall()https://stackoverflow.com/questions/74158144
复制相似问题