Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A tool for generating and managing TypeScript type definitions efficiently.

License

NotificationsYou must be signed in to change notification settings

nlibjs/typing

Repository files navigation

A tool for generating and managing TypeScript type definitions efficiently.

NPM VersionJSRtestcodecov

npm install @nlib/typing
deno add jsr:@nlib/typing
import{typeChecker}from"@nlib/typing"// Denoimport{typeChecker}from"jsr:@nlib/typing";// Webimport{typeChecker}from'https://esm.sh/@nlib/typing@3.0.0';

Usage

import*asassertfrom"node:assert";import{typeChecker,ensure,isString,isPositiveSafeInteger,isArrayOf,isDictionaryOf,isOptionalOf,}from"@nlib/typing";// For example, there is a interface named User.interfaceUser{id:number;name:string;}// You can create a TypeChecker for User with typeChecker().constisUser=typeChecker({id:isPositiveSafeInteger,name:isString,});// typeChecker<T>() returns TypeChecker<T> which is a type guard for T.// https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates// i.e. TypeChecker<User> is (value: unknown) => value is Userassert.equal(isUser({id:1,name:"a"}),true);assert.equal(isUser({id:"1",name:"a"}),false);// You can handle a response with confidence using ensure().constresponse=awaitfetch("https://jsonplaceholder.typicode.com/users/1");constmember=ensure(awaitresponse.json(),isUser);console.info(`member.id:${member.id}`);console.info(`member.name:${member.name}`);// isArrayOf returns TypeChecker<Array<T>>.constisUserArray=isArrayOf(isUser);assert.equal(isUserArray([{id:1,name:"a"},{id:2,name:"b"},{id:3,name:"c"},]),true,);// isDictionaryOf returns TypeChecker<Record<string, T>>.constisUserDictionary=isDictionaryOf(isUser);assert.equal(isUserDictionary({a:{id:1,name:"a"},b:{id:2,name:"b"},c:{id:3,name:"c"},}),true,);// isOptionalOf returns TypeChecker<T | undefined>.constisItem=typeChecker({id:isPositiveSafeInteger,name:isOptionalOf(isString),});assert.equal(isItem({id:1}),true);assert.equal(isItem({id:1,name:"a"}),true);assert.equal(isItem({id:1,name:1}),false);// Example: Tree structureinterfaceNode{id:string;children?:Array<Node>;}constisNode=typeChecker({// You can use regular expression for defining a string pattern.id:/^[0-9a-z]+$/,// You can't use isNode here because isNode is not defined yet.// Use getter for recursive type definition.getchildren(){returnisOptionalOf(isArrayOf(isNode));},});assert.equal(isNode({id:"a"}),true);assert.equal(isNode({id:"a",children:[]}),true);assert.equal(isNode({id:"a",children:[{id:"b"}]}),true);assert.equal(isNode({id:"a",children:[{id:"b",children:[{id:"c"}]}]}),true,);assert.equal(isNode({id:"a",children:[{id:"b",children:[{id:"C"}]}]}),// id: "C" is invalid because it is not lowercase.false,);

About

A tool for generating and managing TypeScript type definitions efficiently.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp