看注释
instantiate<T>(original: T): T; 是为了克隆
instantiate(prefab: Prefab): Node; 是为了实例化预制体
在调用时,如果传入的对象是 Prefab | undefined ,则会被识别为调用 instantiate<T>(original: T): T;
即: instantiate<Prefab | undefined>(original: Prefab | undefined): Prefab | undefined;
不了解的人容易弄错, 导致卡壳一会, 转到定义看下, 才明白要加一下断言或者判断非空,才能让编译器明白这里是传入 Prefab (实际上我已经在合理的地方判断过非空了, 这里是安全可用的)
既然泛型的方法是为了克隆,为什么不另外起个名字呢?