diff --git a/components/divider/index.jsx b/components/divider/index.jsx
deleted file mode 100644
index da92314e4..000000000
--- a/components/divider/index.jsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { inject } from 'vue';
-import PropTypes from '../_util/vue-types';
-import { defaultConfigProvider } from '../config-provider';
-import { getSlot } from '../_util/props-util';
-
-const Divider = {
- name: 'ADivider',
- props: {
- prefixCls: PropTypes.string,
- type: PropTypes.oneOf(['horizontal', 'vertical', '']).def('horizontal'),
- dashed: PropTypes.bool,
- orientation: PropTypes.oneOf(['left', 'right', 'center']),
- },
- setup() {
- return {
- configProvider: inject('configProvider', defaultConfigProvider),
- };
- },
- render() {
- const { prefixCls: customizePrefixCls, type, dashed, orientation = 'center' } = this;
- const getPrefixCls = this.configProvider.getPrefixCls;
- const prefixCls = getPrefixCls('divider', customizePrefixCls);
- const orientationPrefix = orientation.length > 0 ? '-' + orientation : orientation;
- const children = getSlot(this);
- const classString = {
- [prefixCls]: true,
- [`${prefixCls}-${type}`]: true,
- [`${prefixCls}-with-text${orientationPrefix}`]: children.length,
- [`${prefixCls}-dashed`]: !!dashed,
- };
-
- return (
-
- {!!children.length && {children}}
-
- );
- },
-};
-
-/* istanbul ignore next */
-Divider.install = function(app) {
- app.component(Divider.name, Divider);
-};
-
-export default Divider;
diff --git a/components/divider/index.tsx b/components/divider/index.tsx
new file mode 100644
index 000000000..9ea2f4084
--- /dev/null
+++ b/components/divider/index.tsx
@@ -0,0 +1,52 @@
+import { App, computed, defineComponent, inject, PropType, unref } from 'vue';
+import { defaultConfigProvider } from '../config-provider';
+
+const Divider = defineComponent({
+ name: 'ADivider',
+ props: {
+ prefixCls: String,
+ type: {
+ type: String as PropType<'horizontal' | 'vertical' | ''>,
+ default: 'horizontal',
+ },
+ dashed: {
+ type: Boolean,
+ default: false,
+ },
+ orientation: {
+ type: String as PropType<'left' | 'right' | 'center'>,
+ default: 'center',
+ },
+ },
+ setup(props, { slots }) {
+ const { getPrefixCls } = inject('configProvider', defaultConfigProvider);
+ const prefixCls = computed(() => getPrefixCls('divider', props.prefixCls));
+
+ const classString = computed(() => {
+ const { type, dashed, orientation } = props;
+ const orientationPrefix = orientation.length > 0 ? '-' + orientation : orientation;
+ const prefixClsRef = unref(prefixCls);
+ return {
+ [prefixClsRef]: true,
+ [`${prefixClsRef}-${type}`]: true,
+ [`${prefixClsRef}-with-text${orientationPrefix}`]: slots.default,
+ [`${prefixClsRef}-dashed`]: !!dashed,
+ };
+ });
+
+ return () => {
+ return (
+
+ {slots.default?.()}
+
+ );
+ };
+ },
+});
+
+/* istanbul ignore next */
+Divider.install = function(app: App) {
+ app.component(Divider.name, Divider);
+};
+
+export default Divider;
diff --git a/components/divider/style/index.js b/components/divider/style/index.ts
similarity index 100%
rename from components/divider/style/index.js
rename to components/divider/style/index.ts