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!
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
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();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
分享
微博
QQ
微信
回复
2024-08-28 22:58:48
相关问题
HarmonyOS 构造方法在ets实现
829浏览 • 1回复 待解决
HarmonyOS ArkTS问题
854浏览 • 1回复 待解决
如何ArkTS定义和使用?
1758浏览 • 1回复 待解决
HarmonyOS ArkTS类型判断
834浏览 • 1回复 待解决
HarmonyOS ArkTS支持子组件接受T吗
853浏览 • 1回复 待解决
HarmonyOS 组件如何添加
994浏览 • 1回复 待解决
HarmonyOS 类型判断
917浏览 • 1回复 待解决
HarmonyOS类的属性如何初始化?
1283浏览 • 1回复 待解决
参数转换为Object编译失败
1373浏览 • 1回复 待解决