HarmonyOS ArkTS中如何实现泛型构造函数

类似如下代码,createInstance 函数参数 c 的类型无法声明为构造函数,报错:Constructor function type is not supported (ArkTS-no-ctor-signatures-funcs) <ArkTSCheck>,请问如何实现类似功能?

class BeeKeeper { 
  hasMask: boolean; 
} 
 
class ZooKeeper { 
  nametag: string; 
} 
 
class Animal { 
  numLegs: number; 
} 
 
class Bee extends Animal { 
  keeper: BeeKeeper; 
} 
 
class Lion extends Animal { 
  keeper: ZooKeeper; 
} 
 
function createInstance<A extends Animal>(c: new () => A): A { 
  return new c(); 
} 
 
createInstance(Lion).keeper.nametag;  // typechecks! 
createInstance(Bee).keeper.hasMask;   // typechecks!
HarmonyOS
2024-08-28 14:39:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

目前参数不支持构造函数函数类型,如果想实现可以看下以下案例:

interface BeeKeeper { 
  hasMask: boolean; 
} 
interface ZooKeeper { 
  nametag: string 
} 
interface Animal { 
  numLegs: number 
  keeper?: BeeKeeper | ZooKeeper 
} 
export class createInstance { 
  options: Animal 
 
  constructor(option: Animal) { 
    this.options = option; 
  } 
 
  getNumLegsValue(): number { 
    if(this.options.numLegs !== undefined ){ 
      return this.options.numLegs ; 
    } 
    return 0; 
  } 
 
  getKeeperValue(): BeeKeeper | ZooKeeper | undefined{ 
    if(this.options.keeper!== undefined){ 
      return this.options.keeper; 
    } 
    return undefined; 
  } 
} 
 
const numLegsValue = new createInstance({ numLegs: 123456 }).getNumLegsValue(); 
const KeeperValue = new createInstance({ numLegs: 123456, keeper: {hasMask: false} }).getKeeperValue();
分享
微博
QQ
微信
回复
2024-08-28 22:58:48
相关问题
如何ArkTS定义和使用?
311浏览 • 1回复 待解决
HarmonyOS类的属性如何初始化?
470浏览 • 1回复 待解决
参数转换为Object编译失败
695浏览 • 1回复 待解决
如何ArkTS代码执行HTML内的JS函数
2366浏览 • 1回复 待解决
ArkTS如何实现反射?
405浏览 • 1回复 待解决
ArkTS调用C++类的成员函数
1311浏览 • 1回复 待解决