Функция защиты типа TypeScript — это функция, которая выполняет проверку типа значения во время выполнения и помогает сузить тип внутри условного блока. Вот несколько методов, которые вы можете использовать для создания функций защиты типа в TypeScript, а также примеры кода:
-
Защита типа 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 }
-
Защита типа экземпляра:
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 }
-
Защита типа предиката пользовательского типа:
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 }
-
Защита типа дискриминируемых объединений:
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. Защитники типов полезны для повышения безопасности типов и обеспечения более точного вывода типов в коде.