From 6cc16bbd06fbdad9942967d77cc9748619d33dfb Mon Sep 17 00:00:00 2001 From: Sanxiaozhizi Date: Tue, 31 Aug 2021 09:40:13 +0800 Subject: [PATCH] refactor: enhance type definition (#3062) * chore: add vue-tsc for type check * refactor(components): respect Vue's own style type * refactor(components): improve props type * chore(build): improve types * fix(components): remove unnecessary props * perf(components): use shallowRef * fix(components): add missing property type for table * refactor(components): improve time-picker types * refactor(components): extract import type * refactor(components): improve popper types * refactor(components): upload list types * fix(docs): fix type * better type * fix: remove index --- build/build-indices.ts | 26 +- package.json | 1 + .../components/autocomplete/src/index.vue | 10 +- packages/components/button/src/button.vue | 8 +- packages/components/button/src/types.ts | 2 + .../components/calendar/src/date-table.vue | 2 +- packages/components/calendar/src/index.vue | 3 +- packages/components/cascader/src/index.vue | 10 +- .../checkbox/src/checkbox-button.vue | 1 - packages/components/checkbox/src/checkbox.vue | 5 +- .../components/checkbox/src/useCheckbox.ts | 2 +- packages/components/collapse/src/collapse.vue | 3 +- .../src/components/alpha-slider.vue | 7 +- .../components/color-picker/src/index.vue | 7 +- packages/components/dropdown/src/dropdown.vue | 15 +- .../components/image-viewer/src/index.vue | 4 +- packages/components/loading/src/index.ts | 6 +- packages/components/menu/src/menuItem.vue | 4 +- packages/components/popconfirm/src/index.vue | 16 +- .../components/popper/src/renderers/popper.ts | 4 +- .../popper/src/use-popper/defaults.ts | 4 +- .../popper/src/use-popper/popper-options.ts | 2 +- packages/components/progress/src/index.vue | 7 +- packages/components/select-v2/src/defaults.ts | 5 +- packages/components/select-v2/src/select.vue | 2 +- .../components/select-v2/src/useSelect.ts | 3 + packages/components/select/src/select.vue | 14 +- packages/components/slider/src/index.vue | 4 +- packages/components/slider/src/slider.type.ts | 10 +- packages/components/slider/src/useSlide.ts | 12 +- .../components/slider/src/useSliderButton.ts | 4 +- packages/components/slider/src/useStops.ts | 4 +- .../components/table/src/filter-panel.vue | 7 +- .../table/src/table-column/defaults.ts | 1 + .../time-picker/src/common/picker.vue | 43 +- .../time-picker/src/common/props.ts | 2 +- .../src/time-picker-com/panel-time-pick.vue | 2 +- .../src/time-picker-com/panel-time-range.vue | 2 +- .../time-select/src/time-select.vue | 5 +- .../components/tree/src/model/useKeydown.ts | 6 +- packages/components/tree/src/tree-node.vue | 2 +- .../components/upload/src/upload-list.vue | 16 +- .../hooks/use-popper/use-popper-options.ts | 4 +- packages/utils/dom.ts | 7 +- tsconfig.json | 8 +- typings/vue-test-utils.d.ts | 6 +- website/components/side-nav.vue | 7 +- yarn.lock | 525 +++++++++++++++++- 48 files changed, 700 insertions(+), 150 deletions(-) create mode 100644 packages/components/button/src/types.ts diff --git a/build/build-indices.ts b/build/build-indices.ts index e592e8b0bb..49d8b4a6b4 100644 --- a/build/build-indices.ts +++ b/build/build-indices.ts @@ -6,6 +6,15 @@ import algoliasearch from 'algoliasearch' import { slugify } from 'transliteration' import fg from 'fast-glob' +interface Index { + component: string + title: string + anchor: string + content: string + sort: number + path: string +} + const algoliaKey = process.env.ALGOLIA_KEY const client = algoliasearch('7DCTSU0WBW', algoliaKey) @@ -21,7 +30,7 @@ const langs = { const index = client.initIndex(indexName) index.clearObjects().then(() => { const files = fg.sync(`website/docs/${lang}/*.md`) - let indices = [] + const indices: Index[][] = [] files.forEach(file => { const regExp = new RegExp(`website\/docs\/${lang}\/(.*).md`) const pathContent = file.match(regExp) @@ -49,14 +58,17 @@ const langs = { return match }) let i = 0 - indices = indices.concat( + indices.push( matches.map(match => { const title = match[0].replace(/#{2,4}/, '').trim() - const index = { component, title } - index.anchor = slugify(title) - index.content = (match[1] || title).replace(/<[^>]+>/g, '') - index.path = path - index.sort = i++ + const index: Index = { + component, + title, + anchor: slugify(title), + content: (match[1] || title).replace(/<[^>]+>/g, ''), + path: path, + sort: i++, + } return index }), ) diff --git a/package.json b/package.json index 2ad18d925d..98014c54fa 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,7 @@ "vue-jest": "5.0.0-alpha.5", "vue-loader": "^16.1.2", "vue-router": "^4.0.2", + "vue-tsc": "^0.3.0", "webpack": "^4.44.1", "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^3.3.12", diff --git a/packages/components/autocomplete/src/index.vue b/packages/components/autocomplete/src/index.vue index ed1fff3e41..4dab909ca0 100644 --- a/packages/components/autocomplete/src/index.vue +++ b/packages/components/autocomplete/src/index.vue @@ -7,7 +7,7 @@ :append-to-body="popperAppendToBody" pure manual-mode - effect="light" + :effect="Effect.LIGHT" trigger="click" transition="el-zoom-in-top" :gpu-acceleration="false" @@ -100,7 +100,7 @@ import { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants' import throwError from '@element-plus/utils/error' import ElInput from '@element-plus/components/input' import ElScrollbar from '@element-plus/components/scrollbar' -import ElPopper from '@element-plus/components/popper' +import ElPopper, { Effect, Placement } from '@element-plus/components/popper' import type { PropType } from 'vue' @@ -129,7 +129,7 @@ export default defineComponent({ default: 300, }, placement: { - type: String, + type: String as PropType, validator: (val: string): boolean => { return ['top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end'].includes(val) }, @@ -313,7 +313,11 @@ export default defineComponent({ inputRef.value.inputOrTextarea.setAttribute('aria-activedescendant', `${id.value}-item-${highlightedIndex.value}`) } + + return { + Effect, + attrs, suggestions, highlightedIndex, diff --git a/packages/components/button/src/button.vue b/packages/components/button/src/button.vue index 32787ffe35..23e9456eaf 100644 --- a/packages/components/button/src/button.vue +++ b/packages/components/button/src/button.vue @@ -33,16 +33,14 @@ import { elButtonGroupKey } from '@element-plus/tokens' import type { PropType } from 'vue' import type { ComponentSize } from '@element-plus/utils/types' import type { ElFormContext, ElFormItemContext } from '@element-plus/tokens' - -type IButtonType = PropType<'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' | 'default'> -type IButtonNativeType = PropType<'button' | 'submit' | 'reset'> +import type { ButtonNativeType, ButtonType } from './types' export default defineComponent({ name: 'ElButton', props: { type: { - type: String as IButtonType, + type: String as PropType, default: 'default', validator: (val: string) => { return [ @@ -65,7 +63,7 @@ export default defineComponent({ default: '', }, nativeType: { - type: String as IButtonNativeType, + type: String as PropType, default: 'button', validator: (val: string) => { return ['button', 'submit', 'reset'].includes(val) diff --git a/packages/components/button/src/types.ts b/packages/components/button/src/types.ts new file mode 100644 index 0000000000..2240660281 --- /dev/null +++ b/packages/components/button/src/types.ts @@ -0,0 +1,2 @@ +export type ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' | 'default' +export type ButtonNativeType = 'button' | 'submit' | 'reset' diff --git a/packages/components/calendar/src/date-table.vue b/packages/components/calendar/src/date-table.vue index 698bc73116..7b1f90db7a 100644 --- a/packages/components/calendar/src/date-table.vue +++ b/packages/components/calendar/src/date-table.vue @@ -44,8 +44,8 @@ import { computed, defineComponent, ref, - PropType, } from 'vue' +import { PropType } from 'vue' import dayjs, { Dayjs } from 'dayjs' import localeData from 'dayjs/plugin/localeData' import { useLocaleInject } from '@element-plus/hooks' diff --git a/packages/components/calendar/src/index.vue b/packages/components/calendar/src/index.vue index 22958690f8..85da3b7970 100644 --- a/packages/components/calendar/src/index.vue +++ b/packages/components/calendar/src/index.vue @@ -56,11 +56,10 @@