
Research
/Security News
Coruna Respawned: Compromised art-template npm Package Leads to iOS Browser Exploit Kit
Compromised npm package art-template delivered a Coruna-like iOS Safari exploit framework through a watering-hole attack.
Runtime type validation with TypeScript type inference
Validate unknown data at runtime and get automatic TypeScript type narrowing—without separate schema objects or class instances.
Runtime validation libraries typically require you to define schemas separately and instantiate them before use. This creates distance between where you validate and where you consume the data.
Valdex takes a different approach: validate inline, exactly where you need it. No jumping between schema definitions and usage points. No maintaining separate DTO classes or validator instances.
// Traditional approach - schema defined elsewhere
const userSchema = z.object({ name: z.string(), age: z.number() });
const user = userSchema.parse(data);
// valdex - validate at point of use
validate(data, { name: String, age: Number });
// data is now typed as { name: string, age: number }
This is particularly useful when working with:
unknown or any typed data that needs runtime verificationnpm install valdex
import { validate } from 'valdex';
const data: unknown = await fetchData();
validate(data, {
name: String,
age: Number,
active: Boolean
});
// TypeScript now knows the exact type of data
data.name // string
data.age // number
data.active // boolean
validate(data, {
user: {
id: Number,
profile: {
name: String,
email: String
}
}
});
data.user.profile.name // string
validate(data, {
tags: [String], // string[]
items: [{ // { id: number, name: string }[]
id: Number,
name: String
}]
});
data.tags[0] // string
data.items[0].id // number
Use Optional() to allow undefined values:
import { validate, Optional } from 'valdex';
validate(data, {
required: String,
optional: Optional(String), // string | undefined
optionalObject: Optional({ // { id: number } | undefined
id: Number
}),
optionalArray: Optional([Number]) // number[] | undefined
});
Use Nullable() to allow null values:
import { validate, Nullable } from 'valdex';
validate(data, {
required: String,
nullable: Nullable(String), // string | null
nullableObject: Nullable({ // { id: number } | null
id: Number
})
});
import { validate, Optional, Nullable } from 'valdex';
validate(data, {
field: Optional(Nullable(String)) // string | undefined | null
});
| Constructor | TypeScript Type |
|---|---|
String | string |
Number | number |
Boolean | boolean |
Array | any[] |
Object | object |
Date | Date |
When validation fails, a RuntimeTypeError is thrown:
import { validate, RuntimeTypeError } from 'valdex';
try {
validate(data, { count: Number });
} catch (error) {
if (error instanceof RuntimeTypeError) {
console.error(error.message);
// "count must be Number, but got String. Actual value: hello"
}
}
undefined or null)Optional() to allow undefinedNullable() to allow nullNaN is not considered a valid NumberMIT
FAQs
Runtime type validation with TypeScript type inference
We found that valdex demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Compromised npm package art-template delivered a Coruna-like iOS Safari exploit framework through a watering-hole attack.

Company News
As AI accelerates how code is written and shipped, Socket is scaling to protect the software supply chain from the growing wave of attacks targeting open source dependencies.

Company News
Socket is scaling to defend open source against supply chain attacks as AI accelerates software development.