CocosCreator3.0的instantiate返回的类型是什么?

let nodeA = instantiate(A.prefab);//印象中2.x版本可这么用

接着nodeA.getComponent(componentName) 纠错提示说类型 Prefab | null 的对象不包含getComponent方法,也就是与类型Node | null 不完全重合。//大概这么个意思

请问各位,3.0中该怎么改动,望各位赐教,谢谢

已自己找到办法了

3.0 TypeScript 问题答疑及经验分享 - Creator 3.0 - Cocos中文社区 也可以参考这个

我试出来的办法是在prefab类型变量后紧跟“!”号。
let nodeA = instantiate(prefabA!);
因为引擎提供了大概两个不同的instantiate方法,需要指定传入参数的类型为Prefab才能保证返回值的是一个Node类型,而另一个方法用了泛型,返回值类型与传入参数类型相同,所以才会出现类型不匹配的冲突。

let nodeA = instantiate(prefabA!); 意思你的 prefabAPrefab | null 吗?

是,外部拖动绑定的,3.0还是需要养成这种习惯吧?

这一点其实在那个帖子里面也有提,说了好几种解决办法。

你声明的时候这样就好了:

@property(Prefab)
prefabA!: Prefab;

这样一来 prefabA 就是 Prefab 而不用是 Prefab | null

这种写法对于纠错有什么弊端吗?

有,就是你忘记拖的时候这里也不会提示,而是会在运行时报一个 Unable to read property of undefined/null 之类的报错。

所以感觉!号加在哪也是个小技巧,需要自己斟酌利弊。谢谢你的回复

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。