Typescript对类的通用约束

时间:2019-02-18 14:54:12

标签: typescript typescript-generics

我正在尝试制作一个非常简单的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)>,但不起作用

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不可能。 as T是一个类型断言,如果类型不匹配,则会引发错误。但是,类型检查仅在开发时发生,而不在运行时发生。因此,JSON.parse(data) as T;不会将JSON.parse(data)转换为T。它只是告诉编译器JSON.parse(data)T,因为当您将as T分配给该值时,您可以确定。因此,将无法使用TypeScript来做到这一点。您只能使用Javascript进行检查。