爱上撸代码的感觉:教你怎样让 TypeScript 成为你的Creator代码催化剂(Github示例项目)

把github示例项目带的creator.d.ts第18行改为下面这样可以让你的cc._Class.extend获得部分代码提示:

    module _Class {
        function extend<T>(options: T): IExtendable<T>;
    }
    interface IExtendable<T> {
        new(): T;
        extend<S>(options: S): IExtendable<S & T>;
    }

能调试吗?代码出错了,在web上能正确显示在哪行代码错了吗?

只能定位到编译出的JS代码出错的地方。我试着在TypeScript编译选项中开启生成source map文件(Chrome如果检测到有SourceMap,就会帮你显示出TS代码并定位到TS出错的地方,而不是显示JS),能成功生成,像这样:


但是由于SourceMap只能在文件的最后一行,而引擎打包处理JS文件的时候每个文件头尾都会插入一些引擎代码,就导致TypeScript的SourceMap失效了。

应为在cc._Class中有一个唯一的__instanceId计数,我用这个做了很多对实例化类进行判断是否是唯一的!
我没用cc.Class是应为我的这些了不需要序列化里面的属性,想少做点运算!

这个简单啊,在基类构造函数里添加一行代码就搞定了:

// AbstractClass.ts:
let instanceId = 0;
export abstract class AbstractClass {
    public __instanceId: number;

    public constructor() {
        this.__instanceId = instanceId++;
    }
}

// TestClass.ts:
import {AbstractClass} from "./AbstractClass";
export class TestClass extends AbstractClass {

}
let a = new TestClass();
let b = new TestClass();
let c = new TestClass();
cc.log(a.__instanceId, b.__instanceId, c.__instanceId);
// 输出0 1 2

所有继承AbstractClass的类都拥有唯一的__instanceId,我估计cc._Class内部也是这样生成的吧。

楼主强大 顶一个

像cc.audioEngine.play()这样的方法貌似仍然没有代码提示……

1赞

creator.d.ts第2493行改成这样就行了:

    export let audioEngine: AudioEngine;
    export class AudioEngine {

如果能把creator.d.ts跟官方api同步好了,即使不用typescript,也能用得很爽的。
这个艰巨的任务就交给楼主啦。:yum:

Mark一下,学习学习

我就是用到哪改到哪。。我尽量跟上吧~

请求官方收录下吧,如果能直接支持最好了

期待官方支持。

我个人的看法是目前自己配置一下TypeScript环境还是挺容易的。虽然使用起来有一点点小麻烦(就是移动和重命名代码文件要先在Creator里做一次,再在IDE里做一次),但是影响不大。官方精力有限,引擎层面多支持一个语言可能有很多坑要填,还是让他们集中精力优化引擎吧~(当然如果官方支持TypeScript,我也会很高兴:grinning:

在大神的带领下,正在切typescript。。。过程很顺利也很爽,相信后面的开发会更爽。

1赞

好像没有cc.systemEvent.on

尝试了下各种报错啊
webstorm最新版 typescript2.14 node7.3

是各种webstorm报错

什么报错呢?可以截个图看看吗?

nantas大大昨天说下一个beta版本将支持TypeScript的SourceMap了,Web上可以直接显示报错的TS代码了。:clap: