typescript 全局声明文件.d.ts声明的变量使用不了

  • Creator 版本: 3.5.1

  • 目标平台: Google chrome浏览器

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

在assets同级目录下新建global.d.ts文件。
声明变量
declare let net_path_name_login_text:string;
在StarGame.ts文件的start()中对变量赋值net_path_name_login_text = “10”;
Cocos creator没有报错,但是浏览器一运行就报错
ReferenceError: net_path_name_login_text is not defined
at StarGame.start (StarGame.ts:91:33)
at component-scheduler.ts:261:22
at OneOffInvoker._invoke (component-scheduler.ts:228:13)
at OneOffInvoker.invoke (component-scheduler.ts:143:14)
at ComponentScheduler.startPhase (component-scheduler.ts:455:27)
at Director.tick (director.ts:694:37)
at callback (game.ts:838:26)

请问这是什么原因,需要导入.d.ts文件吗,在哪导入?

引用的时候要加gIobal.变量吧。太久没用全局变量了,忘记了

加不了,global.net_path_name_login_text,报错:找不到global。使用globalThis,提示没有属性net_path_name_login_text

你这个在严格模式下,无法这样使用,用的时候可以window.net_path_name_login_text = “”,怕爆红,就(window as any).net_path_name_login_text = “”;当初始化后,后续可以直接使用net_path_name_login_text=“10”

我记得看文档好像不推荐使用window,所以我才会使用.d.ts,想声明全局变量,但是不知道为什么用不了

为什么都那么纠结“全局变量”,看了几个烂项目都是怎么歪曲都得搞出“全局变量”来,除了闲的蛋疼都不知道说什么了。
其实最简单就是自己定义一个类用来放不就行了
class GameGlobal{
static net_path_name_login_text:string = “10”;
}
用:
GameGlobal.net_path_name_login_text

d.ts不是用来给你搞全局变量的,是为了让js和一些外部API等非项目代码可以代码提示

1赞

倒不是不会使用单例或者静态,就是想明白为什么.d.ts文件使用不了,看文档是可以使用的,但是又报错,所以不解,想搞清楚是什么原因,是哪里的问题

其实我指这个现象,不是指你,哈哈哈

d.ts是用来骗IDE和编译器的,具体语法你参考js就行了,知道这个原则很多问题就可以理解了

可以单独建个ts文件,里面不要有任何导入导出,这样写
var net_path_name_login_text = “”;
window[“net_path_name_login_text”] = net_path_name_login_text;
然后你就可以在其它文件里面直接使用net_path_name_login_text变量

3.x会有报错提示,temp/tsconfig.cocos.json里面的isolatedModules改成false

.d.ts是描述文件,一般有对应的js文件的。全局变量是全局变量

其实就是字面意思,变量未定义。
d.ts就是个纯生命文件,而不执行定义变量的行为,在将ts编译为js后,d.ts就会消失了。
解决这个问题就是直接在assets目录下,任意位置使用global.ts而不是d.ts