https://github.com/vriskaserket51/typescript-type-checker
Runtime Type Checker for Typescript
https://github.com/vriskaserket51/typescript-type-checker
runtime-typechecking type-checker typescript
Last synced: 3 months ago
JSON representation
Runtime Type Checker for Typescript
- Host: GitHub
- URL: https://github.com/vriskaserket51/typescript-type-checker
- Owner: VriskaSerket51
- License: mit
- Created: 2023-12-23T05:51:17.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-01-08T02:52:30.000Z (over 1 year ago)
- Last Synced: 2025-02-23T14:37:06.566Z (4 months ago)
- Topics: runtime-typechecking, type-checker, typescript
- Language: TypeScript
- Homepage: https://npmjs.com/package/typescript-type-checker
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# typescript-type-checker
typescript-type-checker is Runtime Type Checker for Typescript.
It generates runtime type checking sanitizer script for Typescript.
typescript-type-checker supports all default types, arrays, and custom types.
## How to install
`npm install typescript-type-checker`
## How to use
You can use typescript-type-checker both commandline and script.
### Script usage
```typescript
import { buildScript } from "typescript-type-checker";const srcDir = "./src/lib";
const outputPath = "./out.ts";
const strictMode = false;buildScript(srcDir, outputPath, strictMode);
```### Commandline usage
> args:
> * --src: Input directory which contains .ts files
> * --out: Output directory which sanitizer script will be saved to
> * --strict: Whether use strict mode. In strict mode, script does not check string value can be converted to number or boolean
>
> example:
> $ npx typescript-type-checker --src "./src/lib" --out "./out/sanitizer.ts" --strictThen you can get sanitizer script at "./out/sanitizer.ts".
## Example
`./src/lib/example.ts`
```typescript
export interface Foo {
number: number;
boolean: boolean;
maybeString?: string;
bar: Bar;
}interface Bar {
numbers: number[];
}
```### With strict mode
```typescript
function sanitizeFoo(checker: any) {
if (
typeof checker.number != "number" ||
typeof checker.boolean != "boolean" ||
(checker.maybeString != undefined &&
typeof checker.maybeString != "string") ||
!sanitizeBar(checker.bar)
) {
return false;
}
return true;
}function sanitizeBar(checker: any) {
if (!sanitizenumberArray(checker.numbers)) {
return false;
}
return true;
}function sanitizenumberArray(checker: any) {
if (!Array.isArray(checker)) {
return false;
}for (let i = 0; i < checker.length; i++) {
if (typeof checker[i] != "number") {
return false;
}
}
return true;
}
```### Without strict mode
```typescript
function sanitizeFoo(checker: any) {
if (
typeof checker.number == "string" &&
Boolean(checker.number.trim()) &&
!Number.isNaN(Number(checker.number))
) {
checker.number = Number(checker.number);
}if (
typeof checker.boolean == "string" &&
(checker.boolean == "true" || checker.boolean == "false")
) {
checker.boolean = checker.boolean == "true";
}if (
typeof checker.number != "number" ||
typeof checker.boolean != "boolean" ||
(checker.maybeString != undefined &&
typeof checker.maybeString != "string") ||
!sanitizeBar(checker.bar)
) {
return false;
}
return true;
}function sanitizeBar(checker: any) {
if (!sanitizenumberArray(checker.numbers)) {
return false;
}
return true;
}function sanitizenumberArray(checker: any) {
if (!Array.isArray(checker)) {
return false;
}for (let i = 0; i < checker.length; i++) {
if (typeof checker[i] != "number") {
return false;
}
}
return true;
}
```