我正在尝试制作一个非常简单的Local Storage utiliy方法。我想根据一个键(当然)和指定的类型获得一个条目。
代码如下:
get<T>(key: string): T {
const data = localStorage.getItem(key);
const object = JSON.parse(data) as T;
if (!object) {
throw new Error(`Casting ${JSON.stringify(data)} is impossible`);
}
return object;
}
您知道,强制转换as T
的效率不够。
例如,如果我在本地存储中的输入是<'key',10>,则:
get<NoMatterTheClass>('key')
将以数字形式返回10,并且不会抛出错误。
所以我的问题是:如何确保演员阵容可行?
通用约束?我尝试使用<T extends (new() => T)>
,但不起作用
感谢您的帮助!
答案 0 :(得分:1)
不可能。 as T
是一个类型断言,如果类型不匹配,则会引发错误。但是,类型检查仅在开发时发生,而不在运行时发生。因此,JSON.parse(data) as T;
不会将JSON.parse(data)
转换为T
。它只是告诉编译器JSON.parse(data)
是T
,因为当您将as T
分配给该值时,您可以确定。因此,将无法使用TypeScript
来做到这一点。您只能使用Javascript
进行检查。