跳转到内容

工具类型

信息

本页仅列出了一些可能需要解释其使用的常见工具类型。有关导出类型的完整列表,请参阅 源代码

PropType

在运行时属性声明时用于注解更高级的类型。

  • 示例

    ts
    import type { PropType } from 'vue'
    
    interface Book {
      title: string
      author: string
      year: number
    }
    
    export default {
      props: {
        book: {
          // provide more specific type to `Object`
          type: Object as PropType<Book>,
          required: true
        }
      }
    }
  • 另请参阅 指南 - 组件属性类型化

MaybeRef

  • 仅支持 3.3+

T | Ref 的别名。用于注解 可组合函数 的参数。

MaybeRefOrGetter

  • 仅支持 3.3+

T | Ref | (() => T) 的别名。用于注解 可组合函数 的参数。

ExtractPropTypes

从运行时属性选项对象中提取属性类型。提取的类型是内部面向的 - 即组件接收到的解析后的属性。这意味着布尔属性和具有默认值的属性始终定义,即使它们不是必需的。

要提取公共面向的属性,即父组件允许传递的属性,请使用 ExtractPublicPropTypes

  • 示例

    ts
    const propsOptions = {
      foo: String,
      bar: Boolean,
      baz: {
        type: Number,
        required: true
      },
      qux: {
        type: Number,
        default: 1
      }
    } as const
    
    type Props = ExtractPropTypes<typeof propsOptions>
    // {
    //   foo?: string,
    //   bar: boolean,
    //   baz: number,
    //   qux: number
    // }

ExtractPublicPropTypes

  • 仅支持 3.3+

从运行时属性选项对象中提取属性类型。提取的类型是公共面向的 - 即父组件允许传递的属性。

  • 示例

    ts
    const propsOptions = {
      foo: String,
      bar: Boolean,
      baz: {
        type: Number,
        required: true
      },
      qux: {
        type: Number,
        default: 1
      }
    } as const
    
    type Props = ExtractPublicPropTypes<typeof propsOptions>
    // {
    //   foo?: string,
    //   bar?: boolean,
    //   baz: number,
    //   qux?: number
    // }

ComponentCustomProperties

用于增强组件实例类型,以支持自定义全局属性。

  • 示例

    ts
    import axios from 'axios'
    
    declare module 'vue' {
      interface ComponentCustomProperties {
        $http: typeof axios
        $translate: (key: string) => string
      }
    }

    提示

    增强必须放在模块 .ts.d.ts 文件中。有关详细信息,请参阅Type Augmentation Placement

  • 另请参阅 指南 - 增强全局属性

ComponentCustomOptions

用于增强组件选项类型,以支持自定义选项。

  • 示例

    ts
    import { Route } from 'vue-router'
    
    declare module 'vue' {
      interface ComponentCustomOptions {
        beforeRouteEnter?(to: any, from: any, next: () => void): void
      }
    }

    提示

    增强必须放在模块 .ts.d.ts 文件中。有关详细信息,请参阅Type Augmentation Placement

  • 另请参阅 指南 - 增强自定义选项

ComponentCustomProps

用于增强允许的 TSX 属性,以便在 TSX 元素上使用未声明的属性。

  • 示例

    ts
    declare module 'vue' {
      interface ComponentCustomProps {
        hello?: string
      }
    }
    
    export {}
    tsx
    // now works even if hello is not a declared prop
    <MyComponent hello="world" />

    提示

    增强必须放在模块 .ts.d.ts 文件中。有关详细信息,请参阅Type Augmentation Placement

CSSProperties

用于增强样式属性绑定中允许的值。

  • 示例

    允许任何自定义 CSS 属性

    ts
    declare module 'vue' {
      interface CSSProperties {
        [key: `--${string}`]: string
      }
    }
    tsx
    <div style={ { '--bg-color': 'blue' } }>
    html
    <div :style="{ '--bg-color': 'blue' }"></div>

提示

增强必须放在模块 .ts.d.ts 文件中。有关详细信息,请参阅Type Augmentation Placement

另请参阅

SFC <style> 标签支持使用 v-bind CSS 函数将 CSS 值链接到动态组件状态。这允许在不进行类型增强的情况下使用自定义属性。

实用类型已加载