# interface2class

> interface gen class

Latest version **0.1.2** (published 2024-03-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install interface2class
pnpm add interface2class
yarn add interface2class
bun add interface2class
```

Provides the command `i2c`.

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2024-03-01 |
| First published | 2023-12-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 10 |
| Unpacked size | 22.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | zhousg |
| Maintainers | zhoushugang |
| Keywords | interface, generate, class, typescript, ArtTS |

## Links

- npm: https://www.npmjs.com/package/interface2class
- Repository: https://github.com/HarmonyOS-Next/interface2class
- Homepage: https://github.com/HarmonyOS-Next/interface2class#readme
- Issues: https://github.com/HarmonyOS-Next/interface2class/issues
- npm.io page: https://npm.io/package/interface2class

## Dependencies (10)

- [esno](https://npm.io/package/esno.md) ^4.0.0
- [unbuild](https://npm.io/package/unbuild.md) ^2.0.0
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.2.0
- [commander](https://npm.io/package/commander.md) ^11.1.0
- [picocolors](https://npm.io/package/picocolors.md) ^1.0.0
- [typescript](https://npm.io/package/typescript.md) ^5.3.3
- [@types/node](https://npm.io/package/@types/node.md) ^20.10.5
- [magic-string](https://npm.io/package/magic-string.md) ^0.30.5
- [@ast-grep/napi](https://npm.io/package/@ast-grep/napi.md) ^0.14.4
- [@types/fs-extra](https://npm.io/package/@types/fs-extra.md) ^11.0.4

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 0.1.2 (latest) — 2024-03-01
- 0.1.1 — 2023-12-28
- 0.1.0 — 2023-12-19
- 0.0.14 — 2023-12-18
- 0.0.13 — 2023-12-18
- 0.0.12 — 2023-12-17
- 0.0.11 — 2023-12-16
- 0.0.10 — 2023-12-16
- 0.0.8 — 2023-12-16
- 0.0.7 — 2023-12-16
- 0.0.6 — 2023-12-16
- 0.0.5 — 2023-12-15
- 0.0.4 — 2023-12-15
- 0.0.3 — 2023-12-15
- 0.0.2 — 2023-12-15
- … 1 more at https://npm.io/package/interface2class/versions

## README

# interface2class

一个通过 `interface` 生成 `class` 的命令行工具，适用于 `TS` 和 `ArkTS`

## 安装 

```shell
npm i interface2class -g
```

## 使用

- 文件 `demo.ts`

```typescript
enum Gender {
  MAN = 'men',
  WOMAN = 'women'
}

interface Response {
  code: number
  message: string
  data: User
}

interface User {
  nickname: string
  age: number
  avatar: ResourceStr
  createAt: Date 
  gender: Gender
  hobby: string[]
  follows: User[]
  isValid: 0 | 1
}
```

- 执行命令

```shell
i2c ./demo.ts
```

- 自动写入 `demo.ts`

```typescript
enum Gender {
  MAN = 'men',
  WOMAN = 'women'
}

interface Response {
  code: number
  message: string
  data: User
}

interface User {
  nickname: string
  age: number
  avatar: ResourceStr
  createAt: Date 
  gender: Gender
  hobby: string[]
  follows: User[]
  isValid: 0 | 1
}

// auto gen →

export class ResponseModel implements Response {
  code: number = 0
  message: string = ''
  data: User = new UserModel({} as User)

  constructor(model: Response) {
    this.code = model.code
    this.message = model.message
    this.data = model.data
  }
}
export class UserModel implements User {
  nickname: string = ''
  age: number = 0
  avatar: ResourceStr = ''
  createAt: Date = new Date()
  gender: Gender = Gender.MAN
  hobby: string[] = []
  follows: User[] = []
  isValid: 0 | 1 = 0

  constructor(model: User) {
    this.nickname = model.nickname
    this.age = model.age
    this.avatar = model.avatar
    this.createAt = model.createAt
    this.gender = model.gender
    this.hobby = model.hobby
    this.follows = model.follows
    this.isValid = model.isValid
  }
}
```

## 格式化 Interface 

如果出现生成 class 失败，请格式化后再生成

- 文件 `demo.ts`
```typescript
/**
* 报文数据
*/
export interface Data {
  /**
   * 总页数
   */
  pageTotal?: number;
  /**
   * 数据集合
   */
  rows?: Row[];
  /**
   * 总数
   */
  total?: number;
  [property: string]: any;
}
```

- 执行命令

```shell
i2c format ./demo.ts
```

- 格式化 `demo.ts`

```typescript
/** 报文数据 */
export interface Data {
  /** 总页数 */
  pageTotal: number | null;
  /** 数据集合 */
  rows: Row[] | null;
  /** 总数 */
  total: number | null;
}
```

---
_Source: https://npm.io/package/interface2class · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
