Exeteres Автор темы 24 Опубликовано: 7 января, 2020 (изменено) В 07.01.2020 в 18:34, hohserg сказал: Запускаю таску watch, транслированный файл появляется(чекнул через проводник), но в VSCode не отображается, таска watch не завершается Watch и не должен завершаться. Он будет смотреть за изменением исходных файлов и компилировать их. Попробуй нажать кнопку обновить вверху панели с файлами. VSCode пока не может следить за изменениями по ссылкам. Изменено 8 февраля, 2020 пользователем Exeteres 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 8 января, 2020 Осваиваю TypeScript. Возник такой вопрос: может ли транслятор сгенерировать декларации(definitions) для файлов, которые че-то экспортируют, т.е. являются библиотеками? Например, если я написал библиотеку, опубликовал, то было бы удобно распространять .d.ts-файлы для нее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 9 января, 2020 9 часов назад, hohserg сказал: Осваиваю TypeScript. Возник такой вопрос: может ли транслятор сгенерировать декларации(definitions) для файлов, которые че-то экспортируют, т.е. являются библиотеками? Например, если я написал библиотеку, опубликовал, то было бы удобно распространять .d.ts-файлы для нее Да, это возможно с помощью флага declaration в compilerOptions файла tsconfig.json. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 11 января, 2020 (изменено) OC-TS: Init не добавляет в воркспейс декларации https://github.com/Exeteres/opc-types Это баг или нужно отдельно ставить? В ide типы не появились даже когда установил вручную Изменено 11 января, 2020 пользователем hohserg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 12 января, 2020 (изменено) 10 часов назад, hohserg сказал: OC-TS: Init не добавляет в воркспейс декларации https://github.com/Exeteres/opc-types Это баг или нужно отдельно ставить? В ide типы не появились даже когда установил вручную Должен был установиться вместе с typescript-to-lua, проверь нет ли ошибок при выполнении команды. (у меня на Windows 10 все ок) require пока не типизирован, но его тоже можно расширить, если это будет нужно. Для импорта в тайпскрипте используются следующие конструкции: Скрытый текст 1. Импорт всего содержимого модуля (аналог require) 2. Импорт отдельных функций, методов и тд Изменено 12 января, 2020 пользователем Exeteres 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 Как получить rest args модуля или аргументы запуска программы? --lua print(select(2, ...)) local rest_args={...} print(rest_args) Какой TS-эквивалент у кода выше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 20 минут назад, hohserg сказал: Как получить rest args модуля или аргументы запуска программы? --lua print(select(2, ...)) local rest_args={...} print(rest_args) Какой TS-эквивалент у кода выше? Я думаю, что верхнюю конструкцию можно встроить в репозиторий с тайпингами, чтобы не писать ее каждый раз вручную. Я сделаю это чуть позже. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 (изменено) А что с функциям, которые возвращают много значений? Например, component#list типизирован как просто функция. let list=component.list(filter) let [address,name]=list() local list = component.list(filter) local address, name = unpack( list(nil) ) Чтобы исправить это приходится костылить: declare module table {function pack(this: void, ...args:any[]): Array<any>;} let list=component.list(filter) let [address,name]=table.pack(list()) local list = component.list(filter) local address, name = unpack( table.pack( list(nil) ) ) Как по-нормальному работать с такими функциями? Изменено 13 января, 2020 пользователем hohserg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 (изменено) @hohserg Это недоработка в декларациях. Я могу ее исправить, но мне нужно понять почему там возвращается функция (Я копировал эти типы из документации). Это какой-то итератор? Или это все-таки таблица? Изменено 28 июня, 2020 пользователем Exeteres Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 (изменено) Это таблица, которая имеет метатаблицу, благодаря которой появляется функция итератора. Т.е. надо как-то типизировать метатаблицы у таблиц Изменено 13 января, 2020 пользователем hohserg Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 2 минуты назад, hohserg сказал: Это таблица, которая имеет метатаблицу, благодаря которой появляется функция итератора. Т.е. надо как-то типизировать метатаблицы у таблиц Ага, вижу. Это не сложно типизировать, сейчас исправлю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 (изменено) @hohserg Исправил в новой версии @opct/openos 0.0.8 component.list() теперь исправно работает как генератор. Аргументы командной строки можно получить из глобальной переменной args. Кстати, рекомендую изучить эту страницу, чтобы избежать возможных проблем совместимости Lua с TypeScript функциями. Позже я опишу этот нюанс и нововведения в гайде. Изменено 13 января, 2020 пользователем Exeteres 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 Ага, уже чекнул эту вики 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 В lua часто используются таблицы вроде local set1={ some=true, ["key"]=true, } local set2={ anyValue=otherAnyValue } По смыслу им эквивалентны Set<string> или Map<string,boolean> и Map<any,any>, но фактические значения, пришедшие из внешнего lua-кода ими не являются. Как их типизировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 @hohserg Похоже, что TypeScript не позволяет использовать в качестве ключа типы отличные от string и number. Я попробую спросить что с этим можно сделать у разработчиков транспилера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 Ну допустим даже в пределах string и number. Нужен какой-то тип, который позволяет получить значение any по ключу. Насколько я понимаю, для своего типа нельзя переопределить оператор []. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 (изменено) В 13.01.2020 в 21:45, hohserg сказал: Ну допустим даже в пределах string и number. Нужен какой-то тип, который позволяет получить значение any по ключу. Насколько я понимаю, для своего типа нельзя переопределить оператор []. Разрабы из дискорда действительно помогли. Надо использовать директиву @luaTable. Не сильно красивое решение (в плане создания таблицы, ведь надо приводить ее к any, т.к. у нее нет этих методов), зато лучше чем полное отсутствие типизации. Скрытый текст Транспилируется в Изменено 28 июня, 2020 пользователем Exeteres 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 Есть готовый класс https://github.com/TypeScriptToLua/TypeScriptToLua/blob/master/src/lualib/declarations/luatable.d.ts И его вроде нужно юзать так ```LuaTable<{},any>``` Только никак не пойму: как его импортировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exeteres Автор темы 24 Опубликовано: 13 января, 2020 29 минут назад, hohserg сказал: Есть готовый класс https://github.com/TypeScriptToLua/TypeScriptToLua/blob/master/src/lualib/declarations/luatable.d.ts И его вроде нужно юзать так ```LuaTable<{},any>``` Только никак не пойму: как его импортировать? Скорее всего он не включен в состав npm пакета. Я могу лишь добавить его к тайпингам opencomputers, хотя это и не логично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 13 января, 2020 Было бы кстати. Такой тип ведь не создает дополнительные инструкции Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах