npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

type-flash

v1.6.5

Published

极速智能的 TypeScript 类型生成器,支持深度解析对象 / JSON / 接口返回,一行代码搞定,让类型定义一键生成,彻底告别手写类型的繁琐。

Readme

type-flash

智能 TypeScript 类型生成器 · 零依赖 · 轻量 · 极速

npm version license

自动生成 TypeScript 类型定义,支持解析对象 / JSON / 接口返回,内置 CLI 命令行工具,一行代码搞定,彻底告别手写类型的繁琐。

功能特性快速开始使用方式配置选项优势对比常见问题


功能特性

type-flash 基于内置的类型推断算法,能够深度解析 JSON 数据结构,自动生成精准的 TypeScript 类型定义。

| 能力 | 说明 | 示例 | |------|------|------| | 基础类型识别 | 自动识别 string / number / boolean / null / undefined / function 等多种类型 | name: string | | 嵌套对象推导 | 递归遍历深层嵌套结构,自动生成子接口定义,支持无限层级 | profile: UserProfile | | 联合类型合并 | 数组元素类型不一致时,自动合并为联合类型,保留完整类型信息 | (string \| number)[] | | 可选属性识别 | 智能分析数组中对象的字段出现频率,自动标记可选属性 | desc?: string | | 结构等价去重 | 基于结构等价性算法,相同结构的对象自动复用同一类型,避免重复定义 | 全局唯一类型 | | 循环引用检测 | 自动检测 JSON 数据中的循环引用,生成合法的 type alias 处理循环 | 安全无栈溢出 | | 函数类型支持 | 支持识别函数类型,正确输出 Function 类型声明 | callback: Function |

灵活的输出控制

  • 双风格输出:支持 interfacetype alias 两种输出风格,适配不同团队规范;
  • 命名风格切换:支持 PascalCase / camelCase 两种命名风格,满足各种编码规范;
  • 前后缀自定义:为所有生成的类型名添加统一前缀/后缀,如 IUserDTO
  • 自定义类型名:通过 typeNameMap 精确指定任意层级字段的类型名称;
  • 属性排序:支持字母序 / 定义序两种属性排序方式;

工程化能力

| 特性 | 说明 | |------|------| | CLI 命令行 | 开箱即用的命令行工具,支持文件输入/输出、管道输入,轻松集成到工作流 | | 双模块输出 | 同时提供 CommonJS 和 ESM 两种模块格式,兼容 Node.js 和浏览器环境 | | TypeScript 原生 | 纯 TypeScript 编写,类型定义开箱即用,支持 IDE 智能提示 | | 零依赖 | 运行时零第三方依赖,包体仅 ~10KB,轻量无负担 | | 高兼容性 | 支持 Node.js 14+,兼容所有主流 TypeScript 版本 |


快速开始

安装

# npm
npm install type-flash --save-dev

# yarn
yarn add type-flash -D

# 全局安装(使用 CLI)
npm install -g type-flash

使用

import { generate } from 'type-flash';

const data = {
  id: 1,
  name: 'Alice',
  email: '[email protected]',
  profile: {
    avatar: 'https://example.com/avatar.jpg',
    bio: 'Hello World',
  },
  tags: ['admin', 'user', 88],
};

const result = generate(data, { rootName: 'User' });
console.log(result);

输出结果:

/**
 * Generated by type-flash
 * Root type: User
 */
export interface User {
  email: string;
  id: number;
  name: string;
  profile: UserProfile;
  tags: (string | number)[];
}

export interface UserProfile {
  avatar: string;
  bio: string;
}

使用方式

1. 编程式 API

基础用法

import { generate } from 'type-flash';

const result = generate(data, GenerateOptions);

基础示例

import { generate, generateFromString } from 'type-flash';

// 从 JS 对象生成,直接返回代码字符串
const code1 = generate({ name: 'foo', age: 25 }, { rootName: 'User' });

// 从 JSON 字符串生成
const code2 = generateFromString('{"name": "foo"}', { rootName: 'User' });

分页数据示例

import { generate } from 'type-flash';

const apiResponse = {
  code: 200,
  message: 'success',
  data: {
    list: [
      { id: 1, name: 'Alice' },
      { id: 2, name: 'Bob' },
    ],
    total: 100,
    page: 1,
    pageSize: 10,
  },
};

const code = generate(apiResponse, {
  rootName: 'ApiResponse',
});

console.log(code);

输出:

export interface ApiResponse {
  code: number;
  data: ApiResponseData;
  message: string;
}

export interface ApiResponseData {
  list: ApiResponseDataListItem[];
  page: number;
  pageSize: number;
  total: number;
}

export interface ApiResponseDataListItem {
  id: number;
  name: string;
}

2. CLI 命令行

基础用法

// user.json
{
  "id": 1,
  "name": "Alice",
  "email": "[email protected]",
  "profile": {
    "avatar": "https://example.com/avatar.jpg",
    "bio": "Hello World",
  },
  "tags": ["admin", "user", 88],
};
# 读取文件并生成类型,输出到控制台
type-flash -i user.json

# 指定输出文件
type-flash -i user.json -o user.types.ts

# 自定义根类型名
type-flash -i user.json -n User

# 使用 type 风格输出
type-flash -i user.json -s type

常用选项示例

# 添加类型前缀/后缀
type-flash -i user.json --prefix I --suffix DTO -o user.ts

# 不生成 export
type-flash -i user.json --no-export

# 4 空格缩进
type-flash -i user.json --indent 4

# camelCase 命名风格
type-flash -i user.json --naming-style camelCase

管道输入(标准输入)

支持通过管道接收其他命令输出的数据,无需新建临时文件,方便接口调试与自动化脚本调用。

适用场景

  • 接口调试:拉取线上接口返回数据即时生成类型,省去存文件步骤;

  • 脚本集成:写自动化脚本时,串联多条命令,自动批量生成类型;

Linux / macOS / Git Bash:

# 从接口直接生成类型
curl https://api.example.com/users | type-flash -n UserList

# 快速测试
echo '{"name": "Alice", "age": 18}' | type-flash -n User

# 从文件读取并管道
cat data.json | type-flash -n User

Windows PowerShell:

# 方式一:先保存到文件(推荐,最稳定)
curl https://api.example.com/users -o temp.json
type-flash -i temp.json -n UserList -o temp.ts

# 方式二:用 curl.exe(需安装 Git 或原生 curl)
curl.exe https://api.example.com/users | type-flash -n UserList

# 方式三:PowerShell 原生方式
(Invoke-RestMethod https://api.example.com/users | ConvertTo-Json -Depth 10) | type-flash -n UserList

所有 CLI 选项

| 选项 | 说明 | 默认值 | |------|------|--------| | -i, --input <file> | 输入 JSON 文件路径 | - | | -o, --output <file> | 输出 TS 文件路径 | 控制台输出 | | -n, --name <name> | 根类型名称 | Root | | -s, --style <style> | 输出风格: interface | type | interface | | --naming-style <s> | 命名风格: PascalCase | camelCase | PascalCase | | --sort <order> | 属性排序: alpha | definition | alpha | | --no-export | 不添加 export 关键字 | - | | --no-optional | 不标记可选属性 | - | | --indent <n> | 缩进空格数 | 2 | | --prefix <prefix> | 类型名前缀 | - | | --suffix <suffix> | 类型名后缀 | - | | -h, --help | 显示帮助信息 | - | | -v, --version | 显示版本号 | - |


配置选项

GenerateOptions 完整配置表

| 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | rootName | string | 'Root' | 根类型名称 | | outputStyle | 'interface' \| 'type' | 'interface' | 输出风格,接口或类型别名 | | namingStyle | 'PascalCase' \| 'camelCase' | 'PascalCase' | 生成的类型名命名风格 | | sortProperties | 'alpha' \| 'definition' | 'alpha' | 属性排序方式,字母序或定义序 | | addExport | boolean | true | 是否添加 export 关键字 | | markOptional | boolean | true | 是否自动标记可选属性 | | indentSize | number | 2 | 缩进空格数 | | lineEnding | string | '\n' | 行尾换行符 | | typeNameMap | Record<string, string> | {} | 自定义类型名映射,key 为字段路径 | | typePrefix | string | '' | 所有类型名添加此前缀 | | typeSuffix | string | '' | 所有类型名添加此后缀 |

自定义类型名映射

const code = generate(jsonData, {
  rootName: 'ApiResponse',
  typeNameMap: {
    'ApiResponse.data': 'ResponseData',
    'ApiResponse.data.list': 'UserItem',
    'ApiResponse.data.list.extra': 'ExtraInfo',
  },
});

💡 提示typeNameMap 的 key 格式为 {根类型名}.{字段名}.{子字段名}...,支持任意深度。


优势对比

| 特性 | type-flash | json-schema-to-typescript | 其它 | |------|-----------|---------------------------|--------------| | 直接输入 JSON | ✅ | ❌ 需要 JSON Schema | ✅ | | 嵌套对象智能命名 | ✅ 上下文感知命名 | ⚠️ 简单拼接 | ⚠️ 简单命名 | | 联合类型推断 | ✅ 完整支持 | ⚠️ 有限支持 | ❌ | | 可选属性识别 | ✅ 频率分析 | ✅ | ❌ | ⚠️部分 | | 结构等价去重 | ✅ 精确算法 | ⚠️ 有限 | ⚠️部分 | | 循环引用处理 | ✅ 安全检测 | ✅ | ❌ | | 函数类型支持 | ✅ | ❌ | ❌ | | CLI 命令行 | ✅ | ✅ | ❌ | | 编程式 API | ✅ | ✅ | ❌ | | 零运行时依赖 | ✅ | ❌ 依赖多 | ❌ 包体大 | | 包体大小 | ~10KB | ~100KB | ~500KB | | 安装速度 | ⚡ 极快 | 🐢 较慢 | 🐢 慢 |


常见问题

Q: 生成的类型名为什么是 UserProfile 而不是 Profile?

A: type-flash 默认会用父级类型名 + 字段名来生成子类型名,避免重名。如果想自定义类型名,可以使用 typeNameMap 配置。

Q: 支持循环引用的 JSON 吗?

A: 支持。type-flash 会自动检测循环引用并生成合法的 type alias,不会出现栈溢出。

Q: 可以在浏览器环境使用吗?

A: 可以。type-flash 同时提供 ESM 格式,支持在浏览器和 Node.js 环境中使用。


如果觉得好用,别忘了给个 ⭐ Star 支持一下喔~