我有一个定义了以下getter / setter的类:
class ConfigStoreController {
get debugMode() {
return (async () => await this.GetConfigParameter("debugMode"))();
}
set debugMode(value: string) {
(async () => await this.SetConfigParameter("debugMode", value))();
}
private async GetConfigParameter(parameter: string) {
return await RX.Storage.getItem(parameter);
}
private async SetConfigParameter(param: string, value: string) {
return await RX.Storage.setItem(param, value);
}
}
export default new ConfigStoreController();
由于该setter,该getter被标记为不正确,也就是说,如果删除了后者,则该getter正常。
错误如下:
return(async()=>等待this.GetConfigParameter(“ debugMode”))(); 错误TS2322:类型'Promise'不能分配给类型'string'。
需要明确的是,仅吸气剂即可编译:
get debugMode() {
return (async () => await this.GetConfigParameter("debugMode"))();
}
我的代码有什么问题?
由于您的getter包含异步操作,因此无法直接重新运行它string
。如果将异步操作包装在匿名函数中,则没关系,该函数调用将返回Promise<string>
。这意味着属性的类型为Promise<string>
单独使用吸气剂是有效的,因为属性类型Promise<string>
是没有问题的。如果您还有设置器,并且设置器的参数与返回的类型不同,则它将停止工作get
。
您可以创建一个Promise<string>
替代属性。
class ConfigStoreController {
GetConfigParameter(p: string): Promise<string> {
return Promise.resolve(p)
}
SetConfigParameter(p: string, value: string): Promise<void> {
return Promise.resolve(void 0)
}
get debugMode() {
return this.GetConfigParameter("debugMode");
}
set debugMode(value: Promise<string>) {
// There is no way to wait for this operation to finish from the outside, this might be an issue
// Also unhandled errors from the anonymous method are not handled and are not propagated to the caller, since the set is async
(async () => this.SetConfigParameter("debugMode", await value))();
}
}
更好的解决方案可能是离开吸气剂,set
而改为使用方法:
class ConfigStoreController {
GetConfigParameter(p: string): Promise<string> {
return Promise.resolve(p)
}
SetConfigParameter(p: string, value: string): Promise<void> {
return Promise.resolve(void 0)
}
get debugMode() {
return this.GetConfigParameter("debugMode");
}
async setDebugMode(value: string) {
this.SetConfigParameter("debugMode", await value)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句