#lua #roblox
Вопрос:
Я хотел бы иметь возможность создать тип, в котором есть недопустимые символы поля. С помощью стола я могу сделать это:
local Element = {
["$typeof"] = 31337,
}
с типами Roblox Luau я не могу этого сделать:
type Element = {
["$typeof"]: number,
}
Как я могу строго ввести это поле в моей таблице элементов, не прибегая к использованию any
?
Ответ №1:
Вы можете сделать это с помощью typeof
оператора и --!strict
прагмы:
Элемент.lua
--!strict
local Element = {
["$typeof"] = 0,
render = function(x, y) end :: (x: number, y: string?): ()
}
export type Element = typeof(Element)
Обратите внимание, что:
- файл, экспортирующий этот тип, должен быть в строгом режиме, чтобы при возврате
typeof
сохранялись типы высокой точности. - Исходный файл, для которого требуется Element.lua, не обязательно должен быть включен в строгом режиме, но все равно неплохо работать в строгом режиме, когда это возможно.
- Возможно, вам не придется использовать синтаксис проверки типа (
::
), в зависимости от того, какие у вас назначения таблиц.