egret-docs-master/Engine2D/callJS/tsCallJs/README.md

112 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 1.说明
* ts 是 js 的超集,因此只要是 js 与 js 可以互相调用的ts 均可以调用,只不过需要增加声明来解决编译时报错。
* ts 最终生成的文件为 js因此 js 调用 ts 其实就是 js 调用 jsts 生成的 js 文件)。
## 2.ts 调用 js
### 步骤
* 找到 js 调用 js 的方法。
* 增加方法调用的声明。 请参考 [如何生成 .d.ts](http://developer.egret.com/cn/github/egret-docs/extension/threes/dts/index.html) 。
### 示例
* js 内的方法
~~~javascript
function callJsFunc(msg) {
console.log("msg from egret : " + msg);
}
~~~
* ts 内声明
~~~javascript
declare function callJsFunc(msg:string);//可以放在 ts 文件内(建议在顶部或者底部,中间的没试过)或者单独放到一个 .d.ts 文件中请不要放在其他类型的文件内。msg 类型根据函数体判断。
~~~
* ts 内调用
~~~javascript
callJsFunc("hello js");
~~~
* 输出
~~~javascript
msg from egret : hello js
~~~
> 总结:在 js 调用 js 的基础上增加声明。其他的比如变量等,也是按上面步骤来实现。
## 3.js 调用 ts
js 调用 ts 其实就是 ts 调用 ts由于 ts 调用 ts 可能会有同模块下的省略写法,因此只要使用不同模块下的调用来写即可。
### 步骤
* 找到非同一模块下 ts 的调用(比如 ```example.A.CallEgretFunc("hello")```)。
* 完全按上面调用的方式来写 (比如上面的 ```example.A.CallEgretFunc("hello")```)。
### 示例
* ts 内的方法
~~~javascript
module exampleA {
export class A {
public callEgretMethod(msg:string):void {
console.log("method msg from js : " + msg);
}
public static CallEgretFunc(msg:string):void {
console.log("static msg from js : " + msg);
}
}
}
~~~
* 非同一模块下 ts 调用
~~~javascript
module exampleB {
export function b() {
//调用方法
var a:exampleA.A = new exampleA.A();
a.callEgretMethod("method");
//调用静态函数
exampleA.A.CallEgretFunc("function");
}
}
~~~
* js 内调用
~~~javascript
var a = new exampleA.A();//去掉 a 的类型
a.callEgretMethod("method");
exampleA.A.CallEgretFunc("function");
~~~
* 输出
~~~javascript
method msg from js : method
static msg from js : function
~~~
> 总结:相当于非同一个模块下的 ts 调用 ts。其他的比如变量等也是按上面步骤来实现。