解决代码严格模式方法

升级cocos creator v3 后,发现自动使用了代码严格模式,在ide项目中取消也不行,网上找了一些方法,说是改

项目下/temp/tsconfig.cocos.json

把 “strict”: true, 改为 “strict”: false

但重启ide后发现会自动改回来,后来试了发现下面这种是可行的

项目下/tsconfig.json

{

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

/取消严格模式/
“compilerOptions”: {
“strict”: false
}
}

重启ide ,已经一切正常

4赞

为什么 要取消。

不建议取消,如果因为绑定组件的报错想忽视可以用这种写法:
@property({ type: ProgressBar })
bar!: ProgressBar;
@property({ type: Sprite })
bg!: Sprite;
这就是告诉编译器,保证有值。

其实我还是不懂为什么不建议取消严格模式,加入符号说到底也只是欺骗编辑器而已,实际不存在还是不存在,在我看来跟取消严格模式没什么不同。而且反而增加了一大堆的符号,一个getComponent?都要加个问号说明东西不一定存在,有必要吗,我不知道他不一定存在?就算真不存在了,你个编辑器也解决不了啊…何必呢…

1赞

严格模式可以保护你的代码不会意外崩溃,如果有了崩溃也会有处理。
这里也有讨论:
https://stackoverflow.com/questions/40349987/how-to-suppress-error-ts2533-object-is-possibly-null-or-undefined
虽然又臭又长,但是ts不就是为了类型安全才存在的么

2赞

使用ts对一部分人来说(比如我?),实际上并不是为了类型安全,只是想要一个方便跳转条理清晰易懂的语言而已(起码不是js)。如果说连是否是null都要再做判断,难免给人一种多此一举的感觉
毕竟我们需要经常引用cc的代码,这种额外判断与直接的代码编写不同,这基本会全方位的覆盖我们全部的脚本,这种臭长会伴随我们所有代码一生

2赞

非常同意,一个小小游戏,不值得这么多代码检查,又不是国家出钱,啃国家的。

这样写,在ide中不实别这个属性,绑不了。

写习惯了,严格模式还是很快的。降低出现意外的可能,效率提升还是很明显的。

终于有人说这了,满屏错误看着难受。。。真习惯不了。官方自己的DEMO都是一堆红线,强迫症不难受嘛。

1赞

真没必要存在,以前的ts写的好好的,也没说不严格出上面问题,现在定义个变量,就提示你不能为null ,用的时候提示可能为null,是真的难受

1赞

按你的写了 用的时候报错 对象可能为“未定义”。

还是按我开始说的那样写吧,目前算是最好的方案了

额,我这里不会报错呀…
Version 3.0.0-preview.1
VSCode

@property(Node)
nodeXXX: Node = null as any

过去俺一直这么解决的,官方终于默认严格模式了

我又试了下,如果直接用!:这么写的话,编辑器里会不认,导致无法拖组件绑定。还是用你的方法简单直接。

严格模式的各种检查配置都可以根据自己的需求来,何必争论呢?开启严格模式就是为了一次开启所有严格模式内包含的代码问题检查,不想用严格模式自己关了就是呗,不过说到底Ts本就是强类型语言,如果抛弃了所有的类型检查那么用Ts就是用了个寂寞,你还不如用js + vscode插件,或者直接用webstorm写,照样可以实现js的跳转,补全…等等

1赞

p: Node = null!
这样就认了。可以参考我在其他帖子的回复

1赞

换到了3.3,把我恶心到了,模块内不允许导出let变量,严格模式的问题,然后项目启动后改tscomfig.cocos.json无效,启动前改会自己替换,启动前改tsconfig.json的严格模式开关也无效,然后重新关掉tsconfig.cocos.json内的严格模式再把写入权限给关了,这nm一启动还给我报严格模式相关的错误~~,tsconfig的作用只能保证代码编辑器内的严格模式提示,而编辑器的怎么改?太恶心了

3.3是默认关闭严格模式的