Функции защиты типа TypeScript: методы и примеры

Функция защиты типа TypeScript — это функция, которая выполняет проверку типа значения во время выполнения и помогает сузить тип внутри условного блока. Вот несколько методов, которые вы можете использовать для создания функций защиты типа в TypeScript, а также примеры кода:

  1. Защита типа typeof:

    function isNumber(value: unknown): value is number {
    return typeof value === 'number';
    }
    if (isNumber(myValue)) {
    // TypeScript knows that myValue is a number within this block
    }
  2. Защита типа экземпляра:

    class MyClass {
    // ...
    }
    function isInstanceOfMyClass(value: unknown): value is MyClass {
    return value instanceof MyClass;
    }
    if (isInstanceOfMyClass(myValue)) {
    // TypeScript knows that myValue is an instance of MyClass within this block
    }
  3. Защита типа предиката пользовательского типа:

    interface MyInterface {
    // ...
    }
    function isMyInterface(value: unknown): value is MyInterface {
    // Perform custom type check here
    // Return true if the value satisfies the type, otherwise false
    }
    if (isMyInterface(myValue)) {
    // TypeScript knows that myValue satisfies the MyInterface type within this block
    }
  4. Защита типа дискриминируемых объединений:

    interface Circle {
    kind: 'circle';
    radius: number;
    }
    interface Square {
    kind: 'square';
    sideLength: number;
    }
    type Shape = Circle | Square;
    function isCircle(shape: Shape): shape is Circle {
    return shape.kind === 'circle';
    }
    function isSquare(shape: Shape): shape is Square {
    return shape.kind === 'square';
    }
    function calculateArea(shape: Shape) {
    if (isCircle(shape)) {
    // TypeScript knows that shape is a Circle within this block
    return Math.PI * shape.radius  2;
    } else if (isSquare(shape)) {
    // TypeScript knows that shape is a Square within this block
    return shape.sideLength  2;
    }
    }

Это всего лишь несколько примеров того, как можно создавать функции защиты типа в TypeScript. Защитники типов полезны для повышения безопасности типов и обеспечения более точного вывода типов в коде.