11import {
2- ComponentObjectPropsOptions ,
3- ExtractPropTypes ,
2+ type ComponentObjectPropsOptions ,
3+ type ExtractPropTypes ,
4+ type DefineSetupFnComponent ,
45 defineComponent ,
56 h ,
67 inject ,
@@ -13,15 +14,30 @@ import {
1314import domElements , { type SupportedHTMLElements } from '@/src/constants/domElements'
1415import { type ExpressionType , generateClassName , generateComponentName , insertExpressions , injectStyle , removeStyle } from '@/src/utils'
1516import { isStyledComponent , isValidElementType , isVueComponent } from '@/src/helper'
16- import { DefaultTheme } from './providers/theme'
17+ import type { DefaultTheme } from './providers/theme'
1718
1819type Attrs = Record < string , any >
1920
20- type BaseContext < T > = T & { theme : DefaultTheme }
21- type PropsDefinition < T > = {
21+ export type BaseContext < T > = T & { theme : DefaultTheme }
22+
23+ export type PropsDefinition < T > = {
2224 [ K in keyof T ] : T [ K ]
2325}
24- function baseStyled < T extends object > ( target : string | InstanceType < any > , propsDefinition ?: PropsDefinition < T > ) {
26+
27+ // 定义 styledComponent 类型
28+ interface StyledComponent < T extends object > {
29+ < P > (
30+ styles : TemplateStringsArray ,
31+ ...expressions : (
32+ | ExpressionType < BaseContext < P & ExtractPropTypes < PropsDefinition < T > > > >
33+ | ExpressionType < BaseContext < P & ExtractPropTypes < PropsDefinition < T > > > > [ ]
34+ ) [ ]
35+ ) : DefineSetupFnComponent < { as ?: string ; props ?: P } & ExtractPropTypes < PropsDefinition < T > > >
36+
37+ attrs < A extends Attrs = Record < string , any > > ( attrs : A ) : StyledComponent < T >
38+ }
39+
40+ function baseStyled < T extends object > ( target : string | InstanceType < any > , propsDefinition ?: PropsDefinition < T > ) : StyledComponent < T > {
2541 if ( ! isValidElementType ( target ) ) {
2642 throw Error ( 'The element is invalid.' )
2743 }
@@ -71,7 +87,7 @@ function baseStyled<T extends object>(target: string | InstanceType<any>, propsD
7187 watch (
7288 tailwindClasses ,
7389 ( classNames ) => {
74- myAttrs . value . class += ` ${ defaultClassName } ${ classNames . join ( ' ' ) } `
90+ myAttrs . value . class += ` ${ classNames . join ( ' ' ) } `
7591 } ,
7692 { deep : true } ,
7793 )
@@ -141,4 +157,4 @@ domElements.forEach((domElement: SupportedHTMLElements) => {
141157 styled [ domElement ] = baseStyled ( domElement )
142158} )
143159
144- export { styled }
160+ export { styled , styled as default }
0 commit comments