【北向开发】【ArkTS语法求助】API10版本中,如何封装单例模式工具类?

起因是项目中有很多地方需要使用KVStore,但是获取KVStore实例需要较为繁琐的步骤,所以想简化这个流程。
基于以上需求,我构建了一个单例工具类,在EntryAbility构造的时候,初始化工具类中的KVStore实例,然后在需要的时候获取KVStore实例,存取数据。代码如下图所示:
编译时IDE给出报错:“ Type 'undefined' is not assignable to type 'SingleKVStore'.”
如果将左侧21行代码中的" = undefined"删掉,则编译时报错如下图
// private generalStore: distributedKVStore.SingleKVStore = undefined;
private generalStore: distributedKVStore.SingleKVStore;
请教论坛里的各位大佬,是我的语法有问题,还是我的实现思路错了?应该如何满足我的需求呢?
您需要先 登录 才能评论/回答

全部评论(5)
语法的问题,ets要求类成员必须初始化。写成 private generalStore: distributedKVStore.SIngleKVStore | undefined = undefined 这样,并且在使用generalStore 做判断,if (this.generalStore) {} 就可以了

2024-02-04 09:38:31
引用:“这个报错是因为你方法标明了返回kvstore,但却可以返回undefined。两种解决办法:1. 修改函数的返回值类型,2. throw new Error()”
收到,可以了,感谢解答

引用:“您好,按照您说的方式试了,还是无法通过编译”
这个报错是因为你方法标明了返回kvstore,但却可以返回undefined。两种解决办法:1. 修改函数的返回值类型,2. throw new Error()

此贴终结,感谢Hore大佬的解答。下面贴图附上两种抽离公共方法实现工具类的方式,仅供参考。如果有其他更优雅的方式,欢迎回复讨论。
方案A:通过引用公共代码块的形式实现
方案B:通过声明单例类的形式实现(存在两个注意点,已在图中使用红字+箭头标注)

2024-02-04 14:10:29