1.0.2 • Published 2 years ago
@hiya620/ts-parser v1.0.2
ts-parser
解析typescript代码,
使用
const { AST } = require('ts-parser')
const ast = new AST({filePath: path.join(__dirname, 'demo.ts')})
console.log(ast.config)
ast.config
:
imports
- 解析import声明生成的数据interfaces
- 解析interface声明生成的数据enums
- 解析enum声明生成的数据types
- 解析type声明生成的数据
功能
解析import声明
例如
import { Base, Time } from './base'
import Props from './props'
import Main, { Props as BaseProps } from './type'
import './style.scss'
生成结果:
interface ImportDeclaration {
from: string
defaultSpecifier?: string
specifiers?: Array<{
imported: string
local: string
}>
}
解析enum声明
例如
export enum Enabled {
DISABLED = 0,
ENABLED = 1
}
生成结果:
export interface TSEnumDeclaration {
/** 枚举名 */
name: string
/** 枚举成员 */
members: Array<{
label: string
value: string | number | boolean
}>
}
解析interface声明
例如
export interface Time {
createTime?: string // 创建时间
updateTime?: string // 更新时间
}
export interface Category extends Base, Time {
id?: string // 类目id
categoryName?: string | number // 类目名称
categoryCode?: string // 类目名称的短码
}
生成结果:
interface FieldType {
simpleType?: string // 简单类型:string, number, boolean
referenceType?: {
name?: string
body?: TSInterfaceDeclaration['body']
} // 引用类型:interface, enum, type等
literalType?: string // 文本值类型:1 | 2
unionType?: Array<FieldType> // 联合类型,例如 string|number
}
interface TSInterfaceDeclaration {
/** 接口名 */
name: string
body: {
[key: string]: {
key: string
optional?: boolean // 是否必须
isArray?: boolean // 是否数组
} & FieldType
}
params?: Array<{
argName: string
defaultValue?: string
}> // 参数,例如 interface Base<T = any> {}
extends?: Array<string>
}
解析支持的写法:
- 带继承
extends
,例如interface Person extends Base {}
- 带参数
<T = any>
,例如interface Person<T = any> { }
- 成员类型为固定值,
id?: '123456'
- 成员类型为基础类,
id?: string
- 成员类型为联合类型,
id?: number | string
- 成员类型为
interface/enum/type
等类型,category?: Category
- 成员类型为
person?: { id: string; name: string }
- 成员类型为数组,
ids?: string[]
或ids?: Array<string>
解析type声明
例如
export type Size = 'sm' | 'md' | 'lg'
export type NumberType = number
export type SimpleType = number | boolean | string | null | undefined
export type Info = Base & Time
export type Person = { id: string; name: string }
export type Persons = Person[]
生成结果:
interface TSTypeAliasDeclaration extends FieldType {
name: string
isArray?: boolean
}