Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

改进Table的DataIndex的类型 #27997

Closed
1 task done
heroboy opened this issue Nov 25, 2020 · 9 comments · Fixed by react-component/table#1090
Closed
1 task done

改进Table的DataIndex的类型 #27997

heroboy opened this issue Nov 25, 2020 · 9 comments · Fixed by react-component/table#1090
Labels
help wanted The suggestion or request has been accepted, we need you to help us by sending a pull request. Inactive

Comments

@heroboy
Copy link

heroboy commented Nov 25, 2020

  • I have searched the issues of this repository and believe that this is not a duplicate.

What problem does this feature solve?

现在DataIndex的定义是这样的:

type DataIndex = string | number | (string | number)[]; 

我建议改成

type DataIndex<RecordType> = keyof RecordType | number | (string | number)[]; 

那样在定义columns的时候,输入{ dataIndex:'立刻就有智能提示了。当然后面的number | (string | number)[]要改成强类型的话,写起来就比较复杂了。
像上面这样改是最常用的情况,是最简单的,效果也能立竿见影。

你们一开始写成这样,大概是因为以前版本支持'user.age'这种写法吧。现在不支持了。

类似其它的Form里的NameList,Table的rowKey,以及其它我还没用到过的等等等等,也一并这样建议。

What does the proposed API look like?

type DataIndex = keyof RecordType | number | (string | number)[];

@afc163 afc163 added the help wanted The suggestion or request has been accepted, we need you to help us by sending a pull request. label Nov 25, 2020
@ant-design-bot
Copy link
Contributor

Hello @heroboy. We totally like your proposal/feedback, welcome to send us a Pull Request for it. Please send your Pull Request to proper branch (feature branch for the new feature, master for bugfix and other changes), fill the Pull Request Template here, provide changelog/TypeScript/documentation/test cases if needed and make sure CI passed, we will review it soon. We appreciate your effort in advance and looking forward to your contribution!

你好 @heroboy, 我们完全同意你的提议/反馈,欢迎直接在此仓库 创建一个 Pull Request 来解决这个问题。请将 Pull Request 发到正确的分支(新特性发到 feature 分支,其他发到 master 分支),务必填写 Pull Request 内的预设模板,提供改动所需相应的 changelog、TypeScript 定义、测试用例、文档等,并确保 CI 通过,我们会尽快进行 Review,提前感谢和期待您的贡献!

giphy

@zombieJ
Copy link
Member

zombieJ commented Nov 25, 2020

string 还是需要保留的,否则对于留存的自定义 Cell.render ts 编译就挂了。但是 keyof 这个想法很不错,欢迎 PR~

@heroboy
Copy link
Author

heroboy commented Nov 25, 2020

@zombieJ keyof X|string 就直接变成 string了,相当于没有写。
你说的Cell.render指的是哪个?另外我觉得编译挂了并不是大问题,只要dataIndex确实是应该keyof X类型的。

@heroboy
Copy link
Author

heroboy commented Nov 26, 2020

我再补充2点。

  1. RecordType是数组的时候keyof RecordType已经包含了number,以及数组的一系列成员函数名字字符串。tuple的时候类似。
  2. 严格来说DataIndex类型应该还是支持symbol的。

@zombieJ
Copy link
Member

zombieJ commented Nov 27, 2020

dateIndex 本身会对应出 onChange 事件里 column 的 field 字段。有种用法就是在 dataIndex 中写一个不存在的字段,然后在 onChange 里通过 field 做额外处理。所以如果是直接 keyof 那么这种用法就 break 掉了。

@heroboy
Copy link
Author

heroboy commented Nov 27, 2020

没完全看懂你(@zombieJ)在说什么。
不过你的意思大概是指表格的某一列不对应数据里的字段吧,例如,显示的是操作按钮之类的。是这样吗?
我觉得这时候不应该写dataIndex, 应该写key
dataIndex是不是因为你不知道默认的情况下用dataIndex作为key的。
有时候key还是要写的,例如,两列同时对应同一个dataIndex, 一列显示id,一列显示id对应的名字。

@zombieJ
Copy link
Member

zombieJ commented Nov 27, 2020

大部分场景下,dataIndexkey 都是相同的,Table 里为此做了简化。另外,推断类型是 string 不影响提示:
截屏2020-11-27 下午1 52 39

ref https://www.typescriptlang.org/play?#code/C4TwDgpgBAglC8UDkBzA9mgJkgPgZ2ACcBLAOxQG4AoKgYzVIKgCMAuORVJIA

@heroboy
Copy link
Author

heroboy commented Nov 27, 2020

不是啊。只是当列表是空的时候,提示所有当前页面出现过的字符串而已。
图片

@zombieJ
Copy link
Member

zombieJ commented Nov 27, 2020

噗,我想当然了。sorry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted The suggestion or request has been accepted, we need you to help us by sending a pull request. Inactive
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants