当前位置: 首页 > 软件库 > 开发工具 > >

TypeScriptToLua

将 TypeScript 转译为 lua
授权协议 MIT
开发语言 TypeScript Lua
所属分类 开发工具
软件类型 开源软件
地区 不详
投 递 者 南宫博简
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

TypeScriptToLua 是将Typescript 转译到lua的转译器。

一个通用的TypeScript到Lua的编译器。在TypeScript中编写代码并发布Lua!

用Lua编写的大型项目会变得难以维护,而且很容易出错。而用TypeScript写代码则提高了可维护性、可读性和健壮性,还提供了良好的工具支持(包括ESLint、Prettier、Visual Studio code和WebStorm)。这个项目在任何接受Lua代码的环境中都很有用,它的强大功能是使用TypeScript声明文件来声明任何现有的API。

在线体验:https://typescripttolua.github.io/play/

示例

TypeScript 代码

// Declare exposed API
type Vector = [number, number, number];

declare function findUnitsInRadius(this: void, center: Vector, radius: number): Unit[];
declare interface Unit {
    isEnemy(other: Unit): boolean;
    kill(): void;
}


// Use declared API in code
function onAbilityCast(this: void, caster: Unit, targetLocation: Vector) {
    const units = findUnitsInRadius(targetLocation, 500);
    const enemies = units.filter(unit => caster.isEnemy(unit));

    for (const enemy of enemies) {
        enemy.kill();
    }
}

转换为 lua

--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]]
-- Lua Library inline imports
function __TS__ArrayFilter(arr, callbackfn)
    local result = {}
    do
        local i = 0
        while i < #arr do
            if callbackfn(_G, arr[i + 1], i, arr) then
                result[#result + 1] = arr[i + 1]
            end
            i = i + 1
        end
    end
    return result
end

function onAbilityCast(caster, targetLocation)
    local units = findUnitsInRadius(targetLocation, 500)
    local enemies = __TS__ArrayFilter(
        units,
        function(____, unit) return caster:isEnemy(unit) end
    )
    for ____, enemy in ipairs(enemies) do
        enemy:kill()
    end
end
  • TypeScriptToLua如何支持循环引用 循环引用 循环引用(Circular Require, Circular dependencies),在lua环境中,指的是这样的情况: 有两个lua文件A和B,文件A中require了B,文件B中require了A,这样在lua解析时会陷入死循环。 很容易想到,在文件require(也就是加载)的时候,应该有三种状态。 未加载 加载中 加载完成 但

 相关资料
  • 问题内容: 我从远程REST服务器读取了JSON对象。此JSON对象具有Typescript类的所有属性(通过设计)。如何将收到的JSON对象转换为var类型? 我不想填充一个打字稿变量(即有一个采用此JSON对象的构造函数)。它很大,因此要按子对象和按属性逐个复制所有内容,这将花费大量时间。 问题答案: 您不能简单地将Ajax请求中的原始JavaScript结果转换为原型JavaScript /

  • 我从远程REST服务器读取了一个JSON对象。这个JSON对象具有typescript类的所有属性(按设计)。如何将收到JSON对象转换为类型变量?

  • 问题内容: 我有一个API请求,返回以下内容: 我想在单击按钮后使用以下代码显示获取的电影标题: 我的问题是,我收到一条错误消息,提示我只能遍历数组,并且我的数据是对象。如何在打字稿中将Object转换为Array,并在表格中显示电影的标题? 问题答案: 没错,您的回复是一个带有字段的对象: 因此,您实际上只想迭代该字段: …甚至更简单:

  • 我有一个相当大的应用程序(~650个文件),它目前混合了ES6模块和遗留的全局名称空间、内部模块和类的实现。 我想转移到100%的ES6模块。 为此,我需要通过添加“export”关键字将所有全局对象转换为ES6模块。 当我添加“export”时,该全局对象就不再是全局的,并且使用该对象的每个文件现在都有一个编译器错误“object not Found”(即无法读取未定义的属性“xxx”)。 为了

  • TypeScript 提供了很多不同功能的编译选项,既可以通过配置 tsconfig.json 文件中的 compilerOptions 属性来实现编译,也可以使用在 tsc 命令后跟随参数这形式,直接编译 .ts 文件。 注意: 当命令行上指定了输入文件时,tsconfig.json 文件会被忽略。 1. 慕课解释 我们通过编译选项 --watch 为例,在当前目录创建 main.ts 文件,写

  • 问题内容: 我的项目中有以下抽象的通用数据持有人(简化): 与一起,其中包含: 其背后的想法是能够定义一组变量,这些变量以 所谓的“状态” 实现该变量,如下所示: 然后,将这些变量添加到的实例中,该实例又被许多“状态”或“进程”共享。然后可以通过不同的状态更改an的值,然后在需要时由原始状态检索。一种共享内存模型。 这个概念已经运行了好多年(是的,这是遗留的),但是我们最近开始转向Java 8,即