dumi icon indicating copy to clipboard operation
dumi copied to clipboard

feat: API props 深度检测自定义子类型

Open cnyballk opened this issue 3 years ago • 15 comments

react-docgen-typescript-dumi-tmp 是 fork 后修改的吗? 我觉得可以为它添加一个 maxPropDepth 的配置,修改 Parser ,新增 children 来放置子类型 示例: image image

结果: image

Originally posted by @cnyballk in https://github.com/umijs/dumi/issues/633#issuecomment-945729367

cnyballk avatar Oct 19 '21 08:10 cnyballk

react-docgen-typescript-dumi-tmp 是 fork 后修改的吗?

不是 fork,直接改产物发的版本,缘由是 TS 发版导致原 NPM 包无法 work、且官方的修复方案也不能奏效,所以 dumi 层做了临时修复,上下文参考:https://github.com/umijs/dumi/issues/732#issuecomment-870200685 ;可能目前的官方版本已经可以 work 了

我觉得可以为它添加一个 maxPropDepth 的配置,修改 Parser ,新增 children 来放置子类型

很棒!感觉上给一个 filter 更实用?有些类型即便层级很浅我们也不希望解析的,比如 HTMLElement,另外 UI 上怎么展示也需要思考下

PeachScript avatar Oct 19 '21 09:10 PeachScript

感觉上给一个 filter 更实用?有些类型即便层级很浅我们也不希望解析的,比如 HTMLElement

我修改的时候有添加了一个数组过滤不再深入查询,不过当前只校验了js的数据类型,得再看看如何方便检查其他基础类型,展示上或许可以参考https://ant.design/components/form-cn/#Interface

cnyballk avatar Oct 19 '21 12:10 cnyballk

分表格展示主要锚点比较难处理,标题用几号、重名锚点处理等,目前也没想到更好的方式

PeachScript avatar Oct 20 '21 12:10 PeachScript

我有空先试试做个demo,看看效果

cnyballk avatar Oct 21 '21 03:10 cnyballk

最近忙着团队绩效😵‍💫估计1月份才是个头

cnyballk avatar Nov 23 '21 15:11 cnyballk

interface里面的子类型什么时候可以显示?

miaoyuxinbaby avatar Jan 17 '22 10:01 miaoyuxinbaby

应该不需要深度,直接加个typeFilter的数组的props就行了,需要检测的加上就行,确实是展示才是问题 增加customTypeFilter image

代码: image 展示: image

cnyballk avatar Jan 23 '22 16:01 cnyballk

等待官方修复子类型说明前,可以通过增加空导出来临时解决这个问题。如下:

/** 加入这个只是为了导出子类型 */
export const TasNavItem = (props: TabsNavItem) => {};
export default TabsNav;

然后在markdown中定义API的 exports,如下

<API exports='["default","TasNavItem"]'/>

就能看到以下效果 image

DawnLck avatar Jan 26 '22 08:01 DawnLck

interface DateTimeProps extends React.HTMLAttributes<HTMLDivElement> {
  datetime: number;
  region: Region;
}

像这种extend引入interface, 有加filter处理的打算吗

HUANGXUANKUN avatar Jan 27 '22 17:01 HUANGXUANKUN

interface DateTimeProps extends React.HTMLAttributes<HTMLDivElement> {
  datetime: number;
  region: Region;
}

像这种extend引入interface, 有加filter处理的打算吗

可以在 .umirc 配置文件里配置 apiParser.propFilter.skipNodeModulestrue 即可忽略掉

{
  apiParser: {
    propFilter: {
      // 是否忽略从 node_modules 继承的属性,默认值为 false
      skipNodeModules: true
    },
  }
}

kianfang avatar Mar 29 '22 08:03 kianfang

最近忙着团队绩效😵‍💫估计1月份才是个头

目前我自己改源码别的深度都能解析出来,但是Interface[]这种就定位不到这个Interface的声明,蹲一个解决方法

adagiomin avatar Jun 29 '22 07:06 adagiomin

目前我自己改源码别的深度都能解析出来,但是Interface[]这种就定位不到这个Interface的声明,蹲一个解决方法

Interface[] 是啥

cnyballk avatar Jun 29 '22 08:06 cnyballk

目前我自己改源码别的深度都能解析出来,但是Interface[]这种就定位不到这个Interface的声明,蹲一个解决方法

Interface[] 是啥

就像下面这样:

interface InfoProps {
  size: string | number;
}

interface Props {
  info: InfoProps, // 这种可以
  // info: InfoProps[],  // 这种在ts解析的时候就定位不到 interface InfoProps
}

adagiomin avatar Jun 29 '22 08:06 adagiomin

目前我自己改源码别的深度都能解析出来,但是Interface[]这种就定位不到这个Interface的声明,蹲一个解决方法

Interface[] 是啥

就像下面这样:

interface InfoProps {
  size: string | number;
}

interface Props {
  info: InfoProps, // 这种可以
  // info: InfoProps[],  // 这种在ts解析的时候就定位不到 interface InfoProps
}

他是当数组类型了吧,我觉得可以自己判断下去掉[]再去获取?不过确实麻烦

cnyballk avatar Jun 29 '22 08:06 cnyballk

请问现在这个能力支持了吗

silhouettesia avatar Jul 14 '22 08:07 silhouettesia