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

在项目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 判断


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

我的看法是,如果不能保证引用链中一直保持非空的话,即使 ?. 必然会进行严格判断,那也是出于严谨考虑;当然,如果能保证非空的情况下的确使用ts中的非空断言可能会更合适

这不对吧 定义的时候已经非空断言 使用的时候还要判断非空

project folder / tsconfig.json

{

/* Base configuration. Do not edit this field. */

“extends”: “./temp/tsconfig.cocos.json”,

"compilerOptions": {

"target": "ES2015",

"module": "ES2015",

"strict": true,  

"strictNullChecks": false,  <--- add

"types": [

  "./temp/declarations/cc",

  "./temp/declarations/jsb",

  "./temp/declarations/cce.env"

],

"experimentalDecorators": true,

"isolatedModules": true,

"moduleResolution": "node",

"noEmit": true,

"forceConsistentCasingInFileNames": true

}

/* Add your custom configuration here. */

}

1赞