The*_*t11 8 generics local-storage typescript
我正在使用以下代码集并使用本地存储获取强类型项目。
该集按预期工作并将 JSON 放入本地存储中。
但是,当取出相同的项目时,转换为通用类型似乎不起作用。它不会引发异常,只是返回 JSON 字符串,而不是所需的类型化对象。
export class StorageService {
constructor() { }
setItem<T>(key: string, item: T): void {
localStorage.setItem(key, JSON.stringify(item));
}
getItem<T>(key: string): T {
let data: any = localStorage.getItem(key);
if (!data) return null;
let obj: T;
try {
obj = <T>JSON.parse(data);
} catch (error) {
obj = null;
}
return obj
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为 Typescript 没有类型转换。
它有类型断言。
所做obj = <T>JSON.parse(data);
的就是告诉编译器无论JSON.parse返回什么,它都是T类型。这一切都发生在编译时,运行时什么也没有。
如果您想以类型保存方式完成类似的操作,您可能必须实现一种标准方法来序列化和反序列化您的类。就像可以将类实例的状态传输为字符串的 Serialized 接口以及从序列化状态创建该类型的新对象的方法一样。