Типовое ограничение Typescript на класс - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сделать очень простой метод локального хранилища.Я хочу получить запись по ключу (конечно) и указанному типу.

Вот код:

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 недостаточно эффективный.Например, если моя запись в Локальном хранилище , тогда: get<NoMatterTheClass>('key') вернет 10 в виде числа и не выдаст ошибку.

Поэтому мой вопрос: как можноЯ уверен, что актерский состав возможен?Общее ограничение?Я пытался с <T extends (new() => T)>, но он не работает

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 18 февраля 2019

Это невозможно.as T - утверждение типа, которое выдаст ошибку, если тип не совпадает.Однако проверка типа происходит только во время разработки, а не во время выполнения.Следовательно, JSON.parse(data) as T; не будет преобразовывать JSON.parse(data) в T.Он просто сообщает компилятору, что JSON.parse(data) равно T, поскольку вы очень уверены в этом, когда назначаете as T этому значению.Так что не будет никакого способа сделать это с TypeScript.Вы можете использовать только Javascript для проверки.

...