Skip to content

Advanced JSTC Usage

Learn advanced validation patterns, custom type checking, and protection level strategies.

Custom Type Checking with Conditions

Create more complex validation scenarios with conditional logic:

ts
import { JSTypeChecker } from "@briklab/lib/jstc";

// Validate with hardened type checking
const checker = new JSTypeChecker("hardened");

// Check multiple values with different types
const mixedData = [42, "hello", true];
const isValidMixed = checker.for(mixedData).check(["number", "string", "boolean"]);
console.log(isValidMixed); // true

Protection Level Strategies

None Level

Useful for user input that may have loose types:

ts
import JSTC from "@briklab/lib/jstc";

JSTC.setProtectionLevel("none");

// May accept coerced values
const loose = JSTC.for(["123"]).check(["number"]);

Hardened Mode

Enforce hardened type checking:

ts
import JSTC from "@briklab/lib/jstc";

JSTC.setProtectionLevel("hardened");

// Only accepts exact type matches
const hardened = JSTC.for([123]).check(["number"]); // true
const hardenedFail = JSTC.for(["123"]).check(["number"]); // false

Live Demo - Advanced Validation

Console
No logs yet.

Nested Type Validation

Validate more complex structures:

ts
import JSTC from "@briklab/lib/jstc";

const complexData = {
  id: 42,
  name: "John",
  active: true,
  tags: ["admin", "user"]
};

// Validate individual properties
console.log(JSTC.for([complexData.id]).check(["number"])); // true
console.log(JSTC.for([complexData.tags]).check(["array"])); // true

Using Multiple Checker Instances

Create isolated checkers for different validation contexts:

ts
import { JSTypeChecker } from "@briklab/lib/jstc";

// Hardened checker for API validation
const apiChecker = new JSTypeChecker("hardened");

// "none" checker for user input
const userChecker = new JSTypeChecker("none");

const apiData = 42;
const userData = "42";

console.log(apiChecker.for([apiData]).check(["number"])); // true
console.log(userChecker.for([userData]).check(["number"])); // may be true

Performance Considerations

For repeated validations, reuse checker instances:

ts
import { JSTypeChecker } from "@briklab/lib/jstc";

const checker = new JSTypeChecker("boundary");

// Reuse for multiple validations (better performance)
const items = [1, 2, 3, 4, 5];
const allValid = items.every(item => checker.for([item]).check(["number"]));
console.log(allValid); // true

Next Steps