类似单例或者静态类这种,任何组件都能直接访问的,试了一下 Creator 好像不支持静态成员?
我用的namespace,
export namespace xxxx {
export const MAX_XXXX = 6;
export enum GAMETYPE {}
export class zzzz {}
export interface yyyy {}
}
Creator 下 ts 的命名空间需要特殊的工作流,你是按那篇文档里弄的吗
啊,没有。
我也是第一次用ts,就这么用了,,,,而且包含namespace的ts文件就在assets下。
你还是按标准流程来用namespace吧。
需要把相关 ts 脚本放到 assets 文件夹外面,然后通过 tsc 把 ts 编译成 js 到 assets 里面吗
按官方文档是这样子。
不过我放在assets下也没出错,不晓得究竟有什么负作用,不熟悉js。
应该会冗余,你手动用 tsc 把 ts 脚本编译了,然后Creator 会把你 assets 下的脚本再编译成 js 一次
反正手动编译的话感觉好麻烦,应该有更好的方法吧
ts不用放到assets外面啊,放里面会自动编译的。
全局变量这样定义:
// 这段代码放到一个.d.ts声明文件里,
// 这个.d.ts不要放到assets文件夹下,否则如果其中有import其它.ts文件的话Creator会报错:
declare let MyClassInstance: MyClass;
--------------------------割---------------------------
// 这段代码要先执行,比如可以放到第一个场景的onLoad里面,
// 保证其它地方引用MyClassInstance时已经被赋值:
MyClassInstance = new MyClass();
--------------------------割---------------------------
// 其它脚本中直接调用,不用import,也有代码提示:
MyClassInstance.myMethod();
没看明白,MyClass 是要实现这个 Window 接口吗,话说这个 Window 是自己声明的接口?我看 ts 有个自带的 Window 接口。而且 window 下也没有 MyClassInstance,直接点会红。能详细说下吗,多谢
之前写得有点问题,看一下我修改过的。
多谢大大
new MyClass 的时候直接报错啊,MyClass 需要在.d.ts里 declare 吗,成员也写进 declare 里?
MyClass需要在.d.ts里import。.d.ts不要放assets目录里,就不会被编译,只被IDE用来代码提示与检查。
// xx.d.ts
import MyClass from "./assets/Script/MyClass";
declare let MyClassInstance: MyClass;
// MyComponent.ts
...
onLoad() {
MyClassInstance = new MyClass(); // 找不到名字MyClassInstance
}
...
这样定义完后其他脚本用 MyClassInstance 时显示找不到名字
我试了一下,如果xx.d.ts中通过import引入MyClass,会使得使用MyClassInstance这个全局变量的文件也需要import xx.d.ts。由于我用WebStorm它自动导入了xx.d.ts所以我昨天没发现。所以最好的办法是declare let MyClassInstance: any; 或者自己写一个MyClass的描述interface而不需要import:
interface MyClass {
property1: string;
property2: number;
method1(): void;
}
declare let MyClassInstance: MyClass;
额,感觉好麻烦,我想我还是搞个常驻节点挂组件好了
话说运行的时候我看好像认不到ts的static成员?
按照你的步骤,还是没办法全局,是否我的方式不对?

