Как сделать правильную проверку типа?

В TypeScript существует несколько способов для правильной проверки типов. Рассмотрим некоторые из них.

1. Использование оператора typeof:
Оператор typeof позволяет определить тип переменной или объекта. Например:

   let variable: number = 10;
   if (typeof variable === "number") {
     console.log("Variable is a number");
   }

В этом примере, если переменная variable является числом, то выполняется блок кода внутри if.

2. Использование оператора instanceof:
Оператор instanceof позволяет проверить, является ли объект экземпляром определенного класса. Например:

   class MyClass {
     // ...
   }
   let obj = new MyClass();
   if (obj instanceof MyClass) {
     console.log("Object is an instance of MyClass");
   }

В этом примере, если obj является экземпляром класса MyClass, то выполняется блок кода внутри if.

3. Использование пользовательских типов:
TypeScript позволяет определить пользовательские типы с помощью ключевого слова type. Например:

   type MyType = {
     prop1: string;
     prop2: number;
   };
   let obj: MyType = {
     prop1: "value1",
     prop2: 10,
   };
   if (typeof obj === "object" && obj.prop1 && obj.prop2) {
     console.log("Object has prop1 and prop2");
   }

В данном примере, если obj является объектом с свойствами prop1 и prop2, то выполняется блок кода внутри if.

4. Использование генериков и типовых предикатов:
TypeScript предоставляет возможность использования генериков и типовых предикатов для более точной проверки типов. Генерики позволяют создавать обобщенные типы, а типовые предикаты позволяют определить функцию, которая проверяет, является ли объект экземпляром определенного класса. Например:

   function isString(value: unknown): value is string {
     return typeof value === "string";
   }
   let variable: unknown = "hello";
   if (isString(variable)) {
     console.log("Variable is a string");
   }

В данном примере функция isString проверяет, является ли значение переменной value строкой. Если да, то выполняется блок кода внутри if.

Таким образом, в TypeScript существует несколько способов для правильной проверки типов, в зависимости от конкретной ситуации и потребностей проекта. Выбор способа зависит от контекста и требований, которые вы ставите перед проверкой типов.