From 1b96a45d0bcec2b91f1cccfbb9cfeaace18d294a Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 23 Aug 2020 12:07:37 +0800 Subject: [PATCH] types(Badge): improve typing --- src/badge/{index.js => index.tsx} | 7 ++++++- src/utils/create/component.ts | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) rename src/badge/{index.js => index.tsx} (80%) diff --git a/src/badge/index.js b/src/badge/index.tsx similarity index 80% rename from src/badge/index.js rename to src/badge/index.tsx index bea6bbeaf..3f428a08e 100644 --- a/src/badge/index.js +++ b/src/badge/index.tsx @@ -2,13 +2,18 @@ import { isDef, createNamespace } from '../utils'; const [createComponent, bem] = createNamespace('badge'); +export type BadgeProps = { + dot?: boolean; + badge?: number | string; +}; + export default createComponent({ props: { dot: Boolean, badge: [Number, String], }, - setup(props) { + setup(props: BadgeProps) { return () => { const { dot, badge } = props; const hasBadge = isDef(badge) && badge !== ''; diff --git a/src/utils/create/component.ts b/src/utils/create/component.ts index 6117f69f0..6cbbf825c 100644 --- a/src/utils/create/component.ts +++ b/src/utils/create/component.ts @@ -2,16 +2,16 @@ * Create a basic component with common options */ import { camelize } from '../format/string'; -import type { App, ComponentOptions } from 'vue'; +import { App, defineComponent, ComponentOptionsWithObjectProps } from 'vue'; export function createComponent(name: string) { - return function (sfc: ComponentOptions) { + return function (sfc: ComponentOptionsWithObjectProps) { sfc.name = name; sfc.install = (app: App) => { app.component(name as string, sfc); app.component(camelize(`-${name}`), sfc); }; - return sfc; + return defineComponent(sfc); }; }