【发布时间】:2023-03-28 20:40:02
【问题描述】:
我正在将一些设置存储到本地存储中,并且我想在从存储中获取(并且最好还插入)值时输入响应。
据我所知,最好的方法似乎是使用函数重载。所以这就是我现在所拥有的并且它有效:
export enum SettingsKey {
hasOnboarded = 'hasOnboarded',
phoneNumber = 'phoneNumber'
}
export async function getSetting(storage: Storage, key: SettingsKey.phoneNumber): Promise<string>
export async function getSetting(storage: Storage, key: SettingsKey.hasOnboarded): Promise<boolean>
export async function getSetting(storage: Storage, key: any) {
return storage.get(key)
}
我不喜欢这个解决方案的一点是,它可能会忘记在枚举中添加一个新元素到重载类型定义中。有没有办法强制处理所有枚举值?或者有没有更好的方法来做到这一点?
我认为这将是一件简单的事情,从值 hasOnboarded 到返回类型 boolean 等的映射,但这显然不是那么容易。
在我看来 conditional types 可能会解决这个问题,但我无法完全理解它是如何工作的。
我也看到了this 的方法,但这似乎有点过多的开销。
任何见解将不胜感激!
【问题讨论】:
标签: typescript enums typescript-typings overloading conditional-types