_G.d.ts
类似全局定义文件(global.d.ts)
参考
declare namespace me {
var dalong_age:number
function demo():string
function print(
}
使用 me.print("dalong")
export 关键字
实际上也是标准的ts 定义,对于export 的需要导入(import),包含了几种模式,export = , export default, export {}
lib.d.ts
export var name_version:number
使用
import demo from "./lib"
demo.name_version
如果namepspace 包含了export 会告诉ts ,可以在namespace 中访问
模块定义
对于模块我们是需要import 的
比如
utf8.d.ts
declare module "utf8" {
/**
* @noSelf
*/
export function codepoint(): void;
}
使用
import * as utf8 from "utf8"; // equiv to `local utf8 = require("utf8");
utf8.codepoint();
self 参数问题
ts 包含了一个隐藏的this,但是很多时候我们的lua 是不需要的,解决方法
this:void
@noSelf
@noSelfInFile
参考
declare namespace table {
export function remove(this: void, table: object, index: number): any;
}
/** @noSelf */
declare namespace table {
export function remove(table: object, index: number): any;
}
/** @noSelfInFile */
declare namespace table {
export function remove(table: object, index: number): any;
}
实际上TypeScriptToLua 也包含了全局参数
@noResolution 参数
使用此参数可以让TypeScriptToLua 不去解析引用的模块
比如
/** @noSelf */
declare module "image-size" {
export function getimagewidth(filename: string): number;
export function getimageheight(filename: string): number;
}
/**
* A module that only contains a number
* @noResolution
*/
declare module "number-of-the-day" {
let x: number;
export = x;
}
/**
* Not very useful for TypeScript. It has no idea what is in here.
* @noResolution
*/
declare module "custom-module";
保留关键字处理
比如try, catch,new 解决方法是定义为一个json 对象
参考
declare let table: {
new: () => any;
};
declare module "creator" {
let exports: {
new: () => any;
};
export = exports;
}
操作符重载
lua 支持操作符重载+,-,* 具体是通过元表操作的 __add,__sub,__mul,__div,__unm
可以自己编写,或者基于lua 扩展
其他功能
与ts 的类型类似比如Unions ,keysof
参考资料
https://typescripttolua.github.io/docs/advanced/writing-declarations
https://typescripttolua.github.io/docs/advanced/language-extensions