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

发布于 1周前 作者 yuanlaile 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 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 鸿蒙Next ArkTS 中如何实现泛型构造函数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

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

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(); 

更多关于HarmonyOS 鸿蒙Next ArkTS 中如何实现泛型构造函数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙的ArkTS(Ark TypeScript)中,实现泛型构造函数主要通过泛型类(Generic Class)来完成。以下是一个基本的实现示例:

// 定义泛型类
class GenericClass<T> {
    private value: T;

    // 泛型构造函数
    constructor(value: T) {
        this.value = value;
    }

    // 获取值的方法
    getValue(): T {
        return this.value;
    }

    // 设置值的方法
    setValue(value: T): void {
        this.value = value;
    }
}

// 使用泛型类
let intInstance = new GenericClass<number>(10);
console.log(intInstance.getValue()); // 输出: 10

let strInstance = new GenericClass<string>("Hello, World!");
console.log(strInstance.getValue()); // 输出: Hello, World!

在上述代码中,GenericClass 是一个泛型类,其构造函数接受一个泛型参数 T。你可以根据需要实例化这个泛型类,并传入不同类型的参数(如 numberstring)。

注意,ArkTS 是基于 TypeScript 的扩展,因此大部分 TypeScript 的泛型特性在 ArkTS 中同样适用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部