强迫症患者请教个ts语法的问题

类里面定义一个变量如下:

child:Node = null;

会报错
image

所以改成了

child:Node|null = null;

这样是没有问题的。
但是使用的时候。。
image
会提示这个变量可能为空。

所以得进行判断,改成类似这样:
image

这个就很烦了。。
虽然有报红线,一样可以跑,但是对红线有强迫症,难受。。

请问大佬们,有没有可以不用加上 |null,又不会报红线的写法?

child:Node!


image
貌似不太行。。是sublime的原因?

在项目tsconfig.json中加入取消严格模式
{
/* Base configuration. Do not edit this field. /
“extends”: “./temp/tsconfig.cocos.json”,
/
Add your custom configuration here. */
“compilerOptions”: {
“strict”: false
}
}

child:Node = null!;

1赞

我也使用这种模式 虽然不是很雅观 但是对于其他方法 这个相对可以接受。

let childs = this.child?.children 不比 if(this.child) 香吗

1赞

可行,谢谢大佬。。
image
image

这个也可行,方便灵活!谢谢大佬

特别香

不香。。。。没有if直观

child:cc.Node=null;
这不就ok了么

定义的时候child!:cc.Node 不需要初始化
使用的时候child?.xxx

估计只有你觉得不够直观吧。。。 :sweat_smile:

?. 是有代价的,它是 if (child !== undefined && child !== null) 的语法糖 它几乎等价于 if (child !== undefined && child !== null) { child.node/* ... */ }

本贴中提到的 null 问题在这个贴子里有说明 3.0 TypeScript 问题答疑及经验分享 - Creator 3.0 - Cocos中文社区

Build Failed: Error: TRS -5.905 錯誤 大佬大佬 能帮忙看看这个问题么

据我从mozilla文档所知,你说的语法糖并不准确,你所说的代价可以忽略不计,因为它是ECMA原生支持的语法,除非需要经过Babel转译为ES5等价代码


抱歉 叹号写错地方了 是child!: Node;

child:Node = null!;

那这可不就是类似吗?代价会是一次 if 判断


语法糖的说法已经做了修改