teal-language / tl

The compiler for Teal, a typed dialect of Lua
MIT License
2.02k stars 101 forks source link

lost type with `or` operator #706

Closed fperrad closed 8 months ago

fperrad commented 8 months ago

the or operator allows some idioms for default value.

local t1: {string:number} = { foo = 42 }
for _, v in pairs(t1) do
    print(v * v)
end
local t2: {string:number} = { foo = 42 }
for _, v in pairs(t2 or {}) do
    print(v * v)
end
for _, v in pairs(t1 or t2) do
    print(v * v)  -- ERROR: cannot use operator '*' for types B (unresolved generic) and B (unresolved generic)
end
for _, v in pairs((t1 or t2) as {string:number}) do  -- workaround with a cast
    print(v * v)
end

local function foo(a: number)
    a = a or 1  -- the most known idiom
    print(a * a)
end

foo(2)